Class DataService

    • Constructor Detail

      • DataService

        public DataService​(String newdsName,
                           String newdsHostname,
                           int newdsTCPPort,
                           DBHandlerConf dbHandlerconf,
                           DataServiceSrv theownServer)
        Instantiates an DataService that uses the DB in the provided path.
        Parameters:
        newdsName - DataService name
        newdsHostname - DataService host name
        newdsTCPPort - DataService tcp port
        dbHandlerconf - Configuration of the DbHandler to use by the manager.
        theownServer - Reference to server instance using this DataService implementation.
    • Method Detail

      • persistEEInfo

        public void persistEEInfo()
        Store EE information.
      • initLocalWithAutoregistration

        public void initLocalWithAutoregistration​(String logicModuleHost,
                                                  int tcpLogicModulePort,
                                                  String dataServiceName)
                                           throws Exception
        Perform a local initialization, and perform the autoregisterDataService to the LogicModule
        Parameters:
        logicModuleHost - Logic Module host
        tcpLogicModulePort - Logic Module port
        dataServiceName - DS name
        Throws:
        Exception - If an error occurs during this process
      • getStorageLocationID

        public StorageLocationID getStorageLocationID()
        Returns the backendID of this DS.
        Returns:
        ID of the backend assigned to this DS.
      • getExecutionEnvironmentID

        public ExecutionEnvironmentID getExecutionEnvironmentID()
        Returns the backendID of this DS.
        Returns:
        ID of the backend assigned to this DS.
      • deployMetaClasses

        public void deployMetaClasses​(String namespaceName,
                                      Map<String,​MetaClass> deploymentPack)
        Description copied from interface: DataServiceAPI
        Deploys a series of MetaClass containers to a given namespace.
        Specified by:
        deployMetaClasses in interface DataServiceAPI
        Parameters:
        namespaceName - Name of the namespace classes belongs to.
        deploymentPack - A map containing name of the class and the MetaClass container.
      • checkGeneratedClass

        public static byte[] checkGeneratedClass​(byte[] classBytes)
      • validateClass

        public static void validateClass​(org.objectweb.asm.ClassReader reader,
                                         ClassLoader loader)
      • deployClasses

        public void deployClasses​(String namespaceName,
                                  Map<Tuple<String,​MetaClassID>,​byte[]> classesToDeploy,
                                  Map<String,​byte[]> classesAspects,
                                  Map<String,​byte[]> stubYamls)
        Description copied from interface: DataServiceAPI
        Deploys the given class in the path corresponding to the given namespace.
        Specified by:
        deployClasses in interface DataServiceAPI
        Parameters:
        namespaceName - Name of the namespace classes belongs to.
        classesToDeploy - bytecode of the classes to be deployed.
        classesAspects - bytes of the aspects of this class
        stubYamls - Stub yamls.
      • enrichClass

        public void enrichClass​(String namespaceName,
                                String className,
                                byte[] classToDeploy,
                                byte[] classAspects,
                                byte[] stubYaml)
        Description copied from interface: DataServiceAPI
        Enriches the given class in the path corresponding to the given namespace.
        Specified by:
        enrichClass in interface DataServiceAPI
        Parameters:
        namespaceName - Name of the namespace which class belongs to.
        className - Name of the class to deploy
        classToDeploy - bytecode of the class to be deployed.
        classAspects - bytes of the aspects of this class
        stubYaml - Stub yaml
      • newPersistentInstance

        public ObjectID newPersistentInstance​(SessionID sessionID,
                                              MetaClassID classID,
                                              ImplementationID implementationID,
                                              Map<MetaClassID,​byte[]> ifaceBitMaps,
                                              SerializedParametersOrReturn params)
        Description copied from interface: DataServiceAPI
        Create an instance of the class with id provided using constructor with id and params specified and store it.
        Specified by:
        newPersistentInstance in interface DataServiceAPI
        Parameters:
        sessionID - Session ID to use
        classID - Id of the class to use
        implementationID - ID of the implementation of the constructor
        ifaceBitMaps - Interface bitmaps (for parameters)
        params - Parameters
        Returns:
        ObjectID of the persisted instance.
      • storeObjects

        public void storeObjects​(SessionID sessionID,
                                 List<ObjectWithDataParamOrReturn> objects,
                                 boolean moving,
                                 Set<ObjectID> idsWithAlias)
        Description copied from interface: DataServiceAPI
        Store objects into Database.
        Specified by:
        storeObjects in interface DataServiceAPI
        Parameters:
        sessionID - SessionID sessionID
        objects - Serialized objects to store (still volatile parameters)
        moving - If true, indicates that objects are being moved from another DS.
        idsWithAlias - Objects with alias
      • makePersistent

        public void makePersistent​(SessionID sessionID,
                                   List<ObjectWithDataParamOrReturn> objectsToPersist)
        Description copied from interface: DataServiceAPI
        This function will deserialize make persistent "parameters" (i.e. object to persist and subobjects if needed) into dataClay memory heap using the same design as for volatile parameters. Eventually, dataClay GC will collect them, and then they will be registered in LogicModule if needed (if objects were created with alias, they must have metadata already).
        Specified by:
        makePersistent in interface DataServiceAPI
        Parameters:
        sessionID - ID of session of make persistent call
        objectsToPersist - objects to store.
      • federate

        public void federate​(SessionID sessionID,
                             ObjectID objectID,
                             ExecutionEnvironmentID externalExecutionEnvironmentID,
                             boolean recursive)
        Description copied from interface: DataServiceAPI
        Federate object with ID provided to external EE specified
        Specified by:
        federate in interface DataServiceAPI
        Parameters:
        sessionID - ID of the session sending the object
        objectID - ID of the object to federate
        externalExecutionEnvironmentID - ID of external execution environment to federate
        recursive - Indicates if all sub-objects must be replicated as well.
      • unfederate

        public void unfederate​(SessionID sessionID,
                               ObjectID objectID,
                               ExecutionEnvironmentID externalExecutionEnvironmentID,
                               boolean recursive)
        Description copied from interface: DataServiceAPI
        Unfederate object with ID provided to external EE specified
        Specified by:
        unfederate in interface DataServiceAPI
        Parameters:
        sessionID - ID of the session
        objectID - ID of the object to unfederate
        externalExecutionEnvironmentID - ID of external execution environment to unfederate
        recursive - Indicates if all sub-objects must be unfederated as well.
      • notifyUnfederation

        public void notifyUnfederation​(SessionID sessionID,
                                       Set<ObjectID> objectIDs)
        Description copied from interface: DataServiceAPI
        Unfederate objects with ID provided.
        Specified by:
        notifyUnfederation in interface DataServiceAPI
        Parameters:
        sessionID - ID of the session.
        objectIDs - ID of the objects to unfederate.
      • runImplementation

        public Object runImplementation​(DataClayObject instance,
                                        ImplementationID implID,
                                        Object[] params)
        This function executes the method specified
        Parameters:
        instance - Instance in which to execute
        implID - Information about the operation to execute
        params - Parameter values used while invoking the operation
        Returns:
        Serialized operation result.
      • synchronize

        public void synchronize​(SessionID sessionID,
                                ObjectID objectID,
                                ImplementationID implID,
                                SerializedParametersOrReturn params,
                                ExecutionEnvironmentID callingBackend)
        Description copied from interface: DataServiceAPI
        This function synchronizes changes in object field
        Specified by:
        synchronize in interface DataServiceAPI
        Parameters:
        sessionID - ID of the session of the execution
        objectID - ID of the object with the information to use by the implementation
        implID - Implementation ID of operation to execute
        params - Serialized parameter values used while invoking the operation
        callingBackend - ID of calling backend or Null if called by client
      • shutdownUpdate

        public void shutdownUpdate()
        Update all objects in memory (or store them if new). Function called at shutdown.
      • upsertObjects

        public void upsertObjects​(SessionID sessionID,
                                  List<ObjectWithDataParamOrReturn> objectIDsAndBytes)
        Description copied from interface: DataServiceAPI
        Updates objects or insert if they do not exist with the values in objectBytes. NOTE: This function is recursive, it is going to other DSs if needed.
        Specified by:
        upsertObjects in interface DataServiceAPI
        Parameters:
        sessionID - ID of session needed.
        objectIDsAndBytes - Map of objects to update.
      • getCopyOfObject

        public SerializedParametersOrReturn getCopyOfObject​(SessionID sessionID,
                                                            ObjectID objectID,
                                                            boolean recursive)
        Description copied from interface: DataServiceAPI
        Retrieves the given object and all subobjects as volatile new objects with new OIDs
        Specified by:
        getCopyOfObject in interface DataServiceAPI
        Parameters:
        sessionID - ID of the current session
        objectID - ID of the object to retrieve
        recursive - retrieve a copy of the whole object copying also its subobjects or only the main object
        Returns:
        a copy of the object
      • updateObject

        public void updateObject​(SessionID sessionID,
                                 ObjectID intoObjectID,
                                 SerializedParametersOrReturn fromObject)
        Description copied from interface: DataServiceAPI
        Method that updates an object (into) with contents obtained from object (from)
        Specified by:
        updateObject in interface DataServiceAPI
        Parameters:
        sessionID - id of the session requesting this method
        intoObjectID - id of the object to put contents into
        fromObject - object to get contents from
      • getObjects

        public List<ObjectWithDataParamOrReturn> getObjects​(SessionID sessionID,
                                                            Set<ObjectID> objectIDs,
                                                            Set<ObjectID> alreadyObtainedObjs,
                                                            boolean recursive,
                                                            ExecutionEnvironmentID replicaDestBackendID,
                                                            int updateReplicaLocs)
        Description copied from interface: DataServiceAPI
        Get the serialized objects with id provided
        Specified by:
        getObjects in interface DataServiceAPI
        Parameters:
        sessionID - ID of session
        objectIDs - IDs of the objects to get
        alreadyObtainedObjs - IDs of already obtained objects
        recursive - Indicates if, per each object to get, also obtain its associated objects.
        replicaDestBackendID - Destination backend of objects being obtained for replica
        updateReplicaLocs - If 1, provided replica dest backend id must be added to replica locs of obtained objects If 2, provided replica dest backend id must be removed from replica locs If 0, replicaDestBackendID field is ignored
        Returns:
        Map of serialized object where key is the objectID. Object is not serialized if flag getOnlyRefs=true
      • removeObjects

        public Map<ObjectID,​ExecutionEnvironmentID> removeObjects​(SessionID sessionID,
                                                                        Set<ObjectID> objectIDs,
                                                                        boolean recursive,
                                                                        boolean moving,
                                                                        ExecutionEnvironmentID newHint)
        Description copied from interface: DataServiceAPI
        This operation removes the objects with IDs provided NOTE: This function is recursive, it is going to other DSs if needed.
        Specified by:
        removeObjects in interface DataServiceAPI
        Parameters:
        sessionID - Session ID
        objectIDs - ID of the objects to remove
        recursive - Indicates if remove is recursive or not.
        moving - Indicates remove is caused by a movement of an object.
        newHint - New hint in case of move.
        Returns:
        IDs of the objects removed and their backends.
      • newReplica

        public Set<ObjectID> newReplica​(SessionID sessionID,
                                        ObjectID objectID,
                                        ExecutionEnvironmentID destBackendID,
                                        boolean recursive)
        Description copied from interface: DataServiceAPI
        This operation creates a new replica of the object with ID provided in the backend specified
        Specified by:
        newReplica in interface DataServiceAPI
        Parameters:
        sessionID - Session
        objectID - ID of the object
        destBackendID - ID of destination backend
        recursive - Indicates if all sub-objects must be replicated as well.
        Returns:
        ids of replicated objects
      • newVersion

        public ObjectID newVersion​(SessionID sessionID,
                                   ObjectID objectID,
                                   ExecutionEnvironmentID destBackendID)
        Description copied from interface: DataServiceAPI
        This operation creates a new version of the object with ID provided in the backend specified
        Specified by:
        newVersion in interface DataServiceAPI
        Parameters:
        sessionID - Session
        objectID - ID of the object
        destBackendID - ID of destination backend
        Returns:
        ID of the version created
      • consolidateVersion

        public void consolidateVersion​(SessionID sessionID,
                                       ObjectID finalVersionObjectID)
        Description copied from interface: DataServiceAPI
        Consolidates object with ID provided
        Specified by:
        consolidateVersion in interface DataServiceAPI
        Parameters:
        sessionID - ID of session
        finalVersionObjectID - ID of the object of the version
      • moveObjects

        public Set<ObjectID> moveObjects​(SessionID sessionID,
                                         ObjectID objectID,
                                         ExecutionEnvironmentID destLocation,
                                         boolean recursive)
        Description copied from interface: DataServiceAPI
        Move object from this location to the one specified
        Specified by:
        moveObjects in interface DataServiceAPI
        Parameters:
        sessionID - Session ID
        objectID - ID of the object to move
        destLocation - Destination location
        recursive - Indicates if all sub-objects (in this location or others) must be moved as well.
        Returns:
        Set of moved objects
      • getClassIDFromObjectInMemory

        public MetaClassID getClassIDFromObjectInMemory​(ObjectID objectID)
        Description copied from interface: DataServiceAPI
        Get ClassID from object in memory. Used in case the object is still pending to register and Hints point to this DS.
        Specified by:
        getClassIDFromObjectInMemory in interface DataServiceAPI
        Parameters:
        objectID - ID of the object
        Returns:
        Class ID of the object
      • gcCollectObjectInternal

        public void gcCollectObjectInternal​(DataClayExecutionObject instance)
        Update or store object.
        Parameters:
        instance - Object to update in DB.
      • addLazyTask

        public void addLazyTask​(ObjectID objectID,
                                LazyTask lazyTask)
        Add lazy task
        Parameters:
        objectID - ID of the object
        lazyTask - Lazy task
      • executeLazyTask

        public void executeLazyTask​(ImplementationID implID,
                                    ObjectID paramObjectID,
                                    SessionID sessionID,
                                    MetaClassID classID)
        Execute lazy task
        Parameters:
        implID - ID of the task to execute
        paramObjectID - ID of the parameter
        sessionID - ID of the session
        classID - ID of the class
      • exists

        public boolean exists​(ObjectID objectID)
        Description copied from interface: DataServiceAPI
        Check if the object exists EE memory
        Specified by:
        exists in interface DataServiceAPI
        Parameters:
        objectID - ID of the object to check
        Returns:
        TRUE if the object exists in EE memory.
      • closeSessionInDS

        public void closeSessionInDS​(SessionID sessionID)
        Description copied from interface: DataServiceAPI
        Close session in DS. Used to notify that some objects are not longer 'retained' by sessions.
        Specified by:
        closeSessionInDS in interface DataServiceAPI
        Parameters:
        sessionID - ID of session.
      • detachObjectFromSession

        public void detachObjectFromSession​(ObjectID objectID,
                                            SessionID sessionID)
        Description copied from interface: DataServiceAPI
        Detach object from session, i.e. remove reference from session provided to object, "dear garbage-collector, the session is not using the object anymore"
        Specified by:
        detachObjectFromSession in interface DataServiceAPI
        Parameters:
        objectID - ID of the object
        sessionID - ID of the session not using the object anymore
      • deleteAlias

        public void deleteAlias​(SessionID sessionID,
                                ObjectID objectID)
        Description copied from interface: DataServiceAPI
        Delete alias of object with ID provided
        Specified by:
        deleteAlias in interface DataServiceAPI
        Parameters:
        sessionID - ID of the session deleting the alias
        objectID - ID of the object to delete the alias from
      • existsInDB

        public boolean existsInDB​(ObjectID objectID)
        Description copied from interface: DataServiceAPI
        Check if the object exists in SL or in any EE memory associated to current SL
        Specified by:
        existsInDB in interface DataServiceAPI
        Parameters:
        objectID - ID of the object to check
        Returns:
        TRUE if the object either exists in SL disk or in EE memory.
      • store

        public void store​(ExecutionEnvironmentID eeID,
                          ObjectID objectID,
                          byte[] bytes)
        Description copied from interface: DataServiceAPI
        Store the object.
        Specified by:
        store in interface DataServiceAPI
        Parameters:
        eeID - ID of the EE triggering the call
        objectID - ID of the object
        bytes - Bytes of the object
      • getLocal

        public byte[] getLocal​(ObjectID objectID)
        Get from this DB
        Parameters:
        objectID - ID of the object
        Returns:
        Bytes of object
      • get

        public byte[] get​(ExecutionEnvironmentID eeID,
                          ObjectID objectID)
        Description copied from interface: DataServiceAPI
        Get serialized object identified by ObjectID
        Specified by:
        get in interface DataServiceAPI
        Parameters:
        eeID - ID of the EE triggering the call
        objectID - ID of the object
        Returns:
        Bytes of the serialized object with ID provided.
      • update

        public void update​(ExecutionEnvironmentID eeID,
                           ObjectID objectID,
                           byte[] newbytes,
                           boolean dirty)
        Description copied from interface: DataServiceAPI
        Updates an object identified by the ID provided with the new values provided.
        Specified by:
        update in interface DataServiceAPI
        Parameters:
        eeID - ID of the EE triggering the call
        objectID - ID of the object.
        newbytes - New byte values
        dirty - dirty Indicates object has been modified. If false, it means that bytes only contains reference counting information. DESIGN NOTE: in order to be able to find out which references where removed in complex objects (arrays, collections) GlobalGc decreases all pointed references in a Get procedure and increase them again (except removed ones) during update. While in EE, objects have memory references so they cannot be removed neither.
      • updateRefs

        public void updateRefs​(Map<ObjectID,​Integer> updateCounterRefs)
        Description copied from interface: DataServiceAPI
        Update counters of references.
        Specified by:
        updateRefs in interface DataServiceAPI
        Parameters:
        updateCounterRefs - Update counter of references.
      • cleanExecutionClasses

        public static void cleanExecutionClasses()
        Static function for cleaning paths. Static so can be called even if DS is not running.
      • cleanCaches

        public void cleanCaches()
        Description copied from interface: CommonManager
        Method that cleans the caches of the manager. Used on testing.
        Specified by:
        cleanCaches in interface CommonManager
      • getDbHandler

        public DBHandler getDbHandler()
        Get DbHandler. Used for testing purposes.
        Returns:
        DbHandler.
      • activateTracing

        public void activateTracing​(int currentAvailableTaskID)
        Description copied from interface: DataServiceAPI
        Activate tracing.
        Specified by:
        activateTracing in interface DataServiceAPI
        Parameters:
        currentAvailableTaskID - Current starting task ID in Extrae
      • getTraces

        public Map<String,​byte[]> getTraces()
        Description copied from interface: DataServiceAPI
        Get Extrae traces (mpits and set files)
        Specified by:
        getTraces in interface DataServiceAPI
        Returns:
        Extrae traces (mpits and set files)
      • finishCacheThreads

        public void finishCacheThreads()
        Finish cache threads.
      • finishClientConnections

        public void finishClientConnections()
        Finish connections in DS.
        Throws:
        Exception - if some exception occurs
      • unregisterFromLogicModule

        public void unregisterFromLogicModule()
        Unregister the data service from the logic module.
      • shutDown

        public void shutDown()
        Description copied from interface: DataServiceAPI
        Shutdown server. Called from Logic Module.
        Specified by:
        shutDown in interface DataServiceAPI
      • disconnectFromOthers

        public void disconnectFromOthers()
        Description copied from interface: DataServiceAPI
        Disconnect server from others servers. Called from Logic Module.
        Specified by:
        disconnectFromOthers in interface DataServiceAPI
      • getNumReferencesTo

        public int getNumReferencesTo​(ObjectID objectID)
        Return number of references pointing to object.
        Parameters:
        objectID - ID of object
        Returns:
        Number of references pointing to object
      • getStorageLocationService

        public StorageLocationService getStorageLocationService()
        Only for testing and SL representing a storage location, get storage location service.
        Returns:
        storageLocation service
      • notifyExecutionEnvironmentShutdown

        public void notifyExecutionEnvironmentShutdown()
        Notify LM current execution environment left
      • notifyStorageLocationShutdown

        public void notifyStorageLocationShutdown()
        Notify LM current storage location left
      • waitForExecutionEnvironmentsToFinish

        public void waitForExecutionEnvironmentsToFinish()
        Wait for all execution environments associated to current data service to finish and return
      • getNumObjectsInEE

        public int getNumObjectsInEE()
        Description copied from interface: DataServiceAPI
        Get number of alive objects in current EE
        Specified by:
        getNumObjectsInEE in interface DataServiceAPI
        Returns:
        number of alive objects in current EE
      • getNumObjects

        public int getNumObjects()
        Description copied from interface: DataServiceAPI
        Get number of objects in SL and all its associated EEs
        Specified by:
        getNumObjects in interface DataServiceAPI
        Returns:
        number of objects in SL and all its associated EEs