UNPKG

hazelcast-client

Version:

Hazelcast - open source In-Memory Data Grid - client for NodeJS

191 lines 9.94 kB
"use strict"; /* * Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); var Promise = require("bluebird"); var MapProxy_1 = require("./MapProxy"); var SetProxy_1 = require("./SetProxy"); var ClientCreateProxyCodec_1 = require("../codec/ClientCreateProxyCodec"); var ClientDestroyProxyCodec_1 = require("../codec/ClientDestroyProxyCodec"); var ClientAddDistributedObjectListenerCodec_1 = require("../codec/ClientAddDistributedObjectListenerCodec"); var ClientRemoveDistributedObjectListenerCodec_1 = require("../codec/ClientRemoveDistributedObjectListenerCodec"); var QueueProxy_1 = require("./QueueProxy"); var ListProxy_1 = require("./ListProxy"); var LockProxy_1 = require("./LockProxy"); var MultiMapProxy_1 = require("./MultiMapProxy"); var RingbufferProxy_1 = require("./ringbuffer/RingbufferProxy"); var ReplicatedMapProxy_1 = require("./ReplicatedMapProxy"); var NearCachedMapProxy_1 = require("./NearCachedMapProxy"); var SemaphoreProxy_1 = require("./SemaphoreProxy"); var AtomicLongProxy_1 = require("./AtomicLongProxy"); var LoggingService_1 = require("../logging/LoggingService"); var InvocationService_1 = require("../invocation/InvocationService"); var HazelcastError_1 = require("../HazelcastError"); var FlakeIdGeneratorProxy_1 = require("./FlakeIdGeneratorProxy"); var PNCounterProxy_1 = require("./PNCounterProxy"); var ReliableTopicProxy_1 = require("./topic/ReliableTopicProxy"); var ProxyManager = /** @class */ (function () { function ProxyManager(client) { this.service = {}; this.proxies = {}; this.logger = LoggingService_1.LoggingService.getLoggingService(); this.client = client; this.invocationTimeoutMillis = this.client.getInvocationService().getInvocationTimeoutMillis(); this.invocationRetryPauseMillis = this.client.getInvocationService().getInvocationRetryPauseMillis(); } ProxyManager.prototype.init = function () { this.service[ProxyManager.MAP_SERVICE] = MapProxy_1.MapProxy; this.service[ProxyManager.SET_SERVICE] = SetProxy_1.SetProxy; this.service[ProxyManager.QUEUE_SERVICE] = QueueProxy_1.QueueProxy; this.service[ProxyManager.LIST_SERVICE] = ListProxy_1.ListProxy; this.service[ProxyManager.LOCK_SERVICE] = LockProxy_1.LockProxy; this.service[ProxyManager.MULTIMAP_SERVICE] = MultiMapProxy_1.MultiMapProxy; this.service[ProxyManager.RINGBUFFER_SERVICE] = RingbufferProxy_1.RingbufferProxy; this.service[ProxyManager.REPLICATEDMAP_SERVICE] = ReplicatedMapProxy_1.ReplicatedMapProxy; this.service[ProxyManager.SEMAPHORE_SERVICE] = SemaphoreProxy_1.SemaphoreProxy; this.service[ProxyManager.ATOMICLONG_SERVICE] = AtomicLongProxy_1.AtomicLongProxy; this.service[ProxyManager.FLAKEID_SERVICE] = FlakeIdGeneratorProxy_1.FlakeIdGeneratorProxy; this.service[ProxyManager.PNCOUNTER_SERVICE] = PNCounterProxy_1.PNCounterProxy; this.service[ProxyManager.RELIABLETOPIC_SERVICE] = ReliableTopicProxy_1.ReliableTopicProxy; }; ProxyManager.prototype.getOrCreateProxy = function (name, serviceName, createAtServer) { if (createAtServer === void 0) { createAtServer = true; } if (this.proxies[name]) { return this.proxies[name]; } else { var newProxy = void 0; if (serviceName === ProxyManager.MAP_SERVICE && this.client.getConfig().getNearCacheConfig(name)) { newProxy = new NearCachedMapProxy_1.NearCachedMapProxy(this.client, serviceName, name); } else { newProxy = new this.service[serviceName](this.client, serviceName, name); } if (createAtServer) { this.createProxy(newProxy); } this.proxies[name] = newProxy; return newProxy; } }; ProxyManager.prototype.createProxy = function (proxyObject) { var promise = Promise.defer(); this.initializeProxy(proxyObject, promise, Date.now() + this.invocationTimeoutMillis); return promise.promise; }; ProxyManager.prototype.findNextAddress = function () { var members = this.client.getClusterService().getMembers(); var liteMember = null; for (var i = 0; i < members.length; i++) { var currentMember = members[i]; if (currentMember != null && currentMember.isLiteMember === false) { return currentMember.address; } else if (currentMember != null && currentMember.isLiteMember) { liteMember = currentMember; } } if (liteMember != null) { return liteMember.address; } else { return null; } }; ProxyManager.prototype.initializeProxy = function (proxyObject, promise, deadline) { var _this = this; if (Date.now() <= deadline) { var address = this.findNextAddress(); var request = ClientCreateProxyCodec_1.ClientCreateProxyCodec.encodeRequest(proxyObject.getName(), proxyObject.getServiceName(), address); var invocation = new InvocationService_1.Invocation(this.client, request); invocation.address = address; this.client.getInvocationService().invoke(invocation).then(function (response) { promise.resolve(response); }).catch(function (error) { if (_this.isRetryable(error)) { _this.logger.warn('ProxyManager', 'Create proxy request for ' + proxyObject.getName() + ' failed. Retrying in ' + _this.invocationRetryPauseMillis + 'ms. ' + error); setTimeout(_this.initializeProxy.bind(_this, proxyObject, promise, deadline), _this.invocationRetryPauseMillis); } else { _this.logger.warn('ProxyManager', 'Create proxy request for ' + proxyObject.getName() + ' failed ' + error); } }); } else { promise.reject('Create proxy request timed-out for ' + proxyObject.getName()); } }; ProxyManager.prototype.isRetryable = function (error) { if (error instanceof HazelcastError_1.ClientNotActiveError) { return false; } return true; }; ProxyManager.prototype.destroyProxy = function (name, serviceName) { delete this.proxies[name]; var clientMessage = ClientDestroyProxyCodec_1.ClientDestroyProxyCodec.encodeRequest(name, serviceName); clientMessage.setPartitionId(-1); return this.client.getInvocationService().invokeOnRandomTarget(clientMessage).return(); }; ProxyManager.prototype.addDistributedObjectListener = function (listenerFunc) { var handler = function (clientMessage) { var converterFunc = function (name, serviceName, eventType) { if (eventType === 'CREATED') { listenerFunc(name, serviceName, 'created'); } else if (eventType === 'DESTROYED') { listenerFunc(name, serviceName, 'destroyed'); } }; ClientAddDistributedObjectListenerCodec_1.ClientAddDistributedObjectListenerCodec.handle(clientMessage, converterFunc, null); }; var codec = this.createDistributedObjectListener(); return this.client.getListenerService().registerListener(codec, handler); }; ProxyManager.prototype.removeDistributedObjectListener = function (listenerId) { return this.client.getListenerService().deregisterListener(listenerId); }; ProxyManager.prototype.createDistributedObjectListener = function () { return { encodeAddRequest: function (localOnly) { return ClientAddDistributedObjectListenerCodec_1.ClientAddDistributedObjectListenerCodec.encodeRequest(localOnly); }, decodeAddResponse: function (msg) { return ClientAddDistributedObjectListenerCodec_1.ClientAddDistributedObjectListenerCodec.decodeResponse(msg).response; }, encodeRemoveRequest: function (listenerId) { return ClientRemoveDistributedObjectListenerCodec_1.ClientRemoveDistributedObjectListenerCodec.encodeRequest(listenerId); } }; }; ProxyManager.MAP_SERVICE = 'hz:impl:mapService'; ProxyManager.SET_SERVICE = 'hz:impl:setService'; ProxyManager.LOCK_SERVICE = 'hz:impl:lockService'; ProxyManager.QUEUE_SERVICE = 'hz:impl:queueService'; ProxyManager.LIST_SERVICE = 'hz:impl:listService'; ProxyManager.MULTIMAP_SERVICE = 'hz:impl:multiMapService'; ProxyManager.RINGBUFFER_SERVICE = 'hz:impl:ringbufferService'; ProxyManager.REPLICATEDMAP_SERVICE = 'hz:impl:replicatedMapService'; ProxyManager.SEMAPHORE_SERVICE = 'hz:impl:semaphoreService'; ProxyManager.ATOMICLONG_SERVICE = 'hz:impl:atomicLongService'; ProxyManager.FLAKEID_SERVICE = 'hz:impl:flakeIdGeneratorService'; ProxyManager.PNCOUNTER_SERVICE = 'hz:impl:PNCounterService'; ProxyManager.RELIABLETOPIC_SERVICE = 'hz:impl:reliableTopicService'; return ProxyManager; }()); exports.ProxyManager = ProxyManager; //# sourceMappingURL=ProxyManager.js.map