modules/backend/app/schemas.js (1,253 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ 'use strict'; const mongoose = require('mongoose'); const passportMongo = require('passport-local-mongoose'); // Fire me up! /** * Module mongo schema. */ module.exports = { implements: 'schemas', inject: [] }; module.exports.factory = function() { const Schema = mongoose.Schema; const ObjectId = mongoose.Schema.Types.ObjectId; // Define Account schema. const Account = new Schema({ firstName: String, lastName: String, email: {type: String, unique: true}, phone: String, company: String, country: String, registered: Date, lastLogin: Date, lastActivity: Date, admin: Boolean, token: String, resetPasswordToken: String, activated: {type: Boolean, default: false}, activationSentAt: Date, activationToken: String }); // Install passport plugin. Account.plugin(passportMongo, { usernameField: 'email', limitAttempts: true, lastLoginField: 'lastLogin', usernameLowerCase: true, errorMessages: { UserExistsError: 'A user with the given email is already registered' } }); const transform = (doc, ret) => { return { _id: ret._id, email: ret.email, phone: ret.phone, firstName: ret.firstName, lastName: ret.lastName, company: ret.company, country: ret.country, admin: ret.admin, token: ret.token, registered: ret.registered, lastLogin: ret.lastLogin, lastActivity: ret.lastActivity }; }; // Configure transformation to JSON. Account.set('toJSON', {transform}); // Configure transformation to JSON. Account.set('toObject', {transform}); // Define Space schema. const Space = new Schema({ name: String, owner: {type: ObjectId, ref: 'Account'}, demo: {type: Boolean, default: false}, usedBy: [{ permission: {type: String, enum: ['VIEW', 'FULL']}, account: {type: ObjectId, ref: 'Account'} }] }); // Define Domain model schema. const DomainModel = new Schema({ space: {type: ObjectId, ref: 'Space', index: true, required: true}, clusters: [{type: ObjectId, ref: 'Cluster'}], caches: [{type: ObjectId, ref: 'Cache'}], queryMetadata: {type: String, enum: ['Annotations', 'Configuration']}, kind: {type: String, enum: ['query', 'store', 'both']}, tableName: String, keyFieldName: String, valueFieldName: String, databaseSchema: String, databaseTable: String, keyType: String, valueType: {type: String}, keyFields: [{ databaseFieldName: String, databaseFieldType: String, javaFieldName: String, javaFieldType: String }], valueFields: [{ databaseFieldName: String, databaseFieldType: String, javaFieldName: String, javaFieldType: String }], queryKeyFields: [String], fields: [{ name: String, className: String, notNull: Boolean, defaultValue: String, precision: Number, scale: Number }], aliases: [{field: String, alias: String}], indexes: [{ name: String, indexType: {type: String, enum: ['SORTED', 'FULLTEXT', 'GEOSPATIAL']}, fields: [{name: String, direction: Boolean}], inlineSizeType: Number, inlineSize: Number }], generatePojo: Boolean }); DomainModel.index({valueType: 1, space: 1, clusters: 1}, {unique: true}); // Define Cache schema. const Cache = new Schema({ space: {type: ObjectId, ref: 'Space', index: true, required: true}, name: {type: String}, groupName: {type: String}, clusters: [{type: ObjectId, ref: 'Cluster'}], domains: [{type: ObjectId, ref: 'DomainModel'}], cacheMode: {type: String, enum: ['PARTITIONED', 'REPLICATED', 'LOCAL']}, atomicityMode: {type: String, enum: ['ATOMIC', 'TRANSACTIONAL', 'TRANSACTIONAL_SNAPSHOT']}, partitionLossPolicy: { type: String, enum: ['READ_ONLY_SAFE', 'READ_ONLY_ALL', 'READ_WRITE_SAFE', 'READ_WRITE_ALL', 'IGNORE'] }, affinity: { kind: {type: String, enum: ['Default', 'Rendezvous', 'Fair', 'Custom']}, Rendezvous: { affinityBackupFilter: String, partitions: Number, excludeNeighbors: Boolean }, Fair: { affinityBackupFilter: String, partitions: Number, excludeNeighbors: Boolean }, Custom: { className: String } }, affinityMapper: String, nodeFilter: { kind: {type: String, enum: ['Default', 'Exclude', 'IGFS', 'OnNodes', 'Custom']}, Exclude: { nodeId: String }, IGFS: { igfs: {type: ObjectId, ref: 'Igfs'} }, Custom: { className: String } }, backups: Number, memoryMode: {type: String, enum: ['ONHEAP_TIERED', 'OFFHEAP_TIERED', 'OFFHEAP_VALUES']}, offHeapMode: Number, offHeapMaxMemory: Number, startSize: Number, swapEnabled: Boolean, cacheWriterFactory: String, cacheLoaderFactory: String, expiryPolicyFactory: String, interceptor: String, storeByValue: Boolean, eagerTtl: {type: Boolean, default: true}, encryptionEnabled: Boolean, eventsDisabled: Boolean, keyConfiguration: [{ typeName: String, affinityKeyFieldName: String }], cacheStoreSessionListenerFactories: [String], onheapCacheEnabled: Boolean, evictionPolicy: { kind: {type: String, enum: ['LRU', 'FIFO', 'SORTED']}, LRU: { batchSize: Number, maxMemorySize: Number, maxSize: Number }, FIFO: { batchSize: Number, maxMemorySize: Number, maxSize: Number }, SORTED: { batchSize: Number, maxMemorySize: Number, maxSize: Number } }, rebalanceMode: {type: String, enum: ['SYNC', 'ASYNC', 'NONE']}, rebalanceBatchSize: Number, rebalanceBatchesPrefetchCount: Number, rebalanceOrder: Number, rebalanceDelay: Number, rebalanceTimeout: Number, rebalanceThrottle: Number, cacheStoreFactory: { kind: { type: String, enum: ['CacheJdbcPojoStoreFactory', 'CacheJdbcBlobStoreFactory', 'CacheHibernateBlobStoreFactory'] }, CacheJdbcPojoStoreFactory: { dataSourceBean: String, dialect: { type: String, enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2'] }, implementationVersion: String, batchSize: Number, maximumPoolSize: Number, maximumWriteAttempts: Number, parallelLoadCacheMinimumThreshold: Number, hasher: String, transformer: String, sqlEscapeAll: Boolean }, CacheJdbcBlobStoreFactory: { connectVia: {type: String, enum: ['URL', 'DataSource']}, connectionUrl: String, user: String, dataSourceBean: String, dialect: { type: String, enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2'] }, initSchema: Boolean, createTableQuery: String, loadQuery: String, insertQuery: String, updateQuery: String, deleteQuery: String }, CacheHibernateBlobStoreFactory: { hibernateProperties: [{name: String, value: String}] } }, storeConcurrentLoadAllThreshold: Number, maxQueryIteratorsCount: Number, storeKeepBinary: Boolean, loadPreviousValue: Boolean, readThrough: Boolean, writeThrough: Boolean, writeBehindEnabled: Boolean, writeBehindBatchSize: Number, writeBehindFlushSize: Number, writeBehindFlushFrequency: Number, writeBehindFlushThreadCount: Number, writeBehindCoalescing: {type: Boolean, default: true}, isInvalidate: Boolean, defaultLockTimeout: Number, atomicWriteOrderMode: {type: String, enum: ['CLOCK', 'PRIMARY']}, writeSynchronizationMode: {type: String, enum: ['FULL_SYNC', 'FULL_ASYNC', 'PRIMARY_SYNC']}, sqlEscapeAll: Boolean, sqlSchema: String, sqlOnheapRowCacheSize: Number, longQueryWarningTimeout: Number, sqlFunctionClasses: [String], snapshotableIndex: Boolean, queryDetailMetricsSize: Number, queryParallelism: Number, statisticsEnabled: Boolean, managementEnabled: Boolean, readFromBackup: Boolean, copyOnRead: Boolean, maxConcurrentAsyncOperations: Number, nearConfiguration: { enabled: Boolean, nearStartSize: Number, nearEvictionPolicy: { kind: {type: String, enum: ['LRU', 'FIFO', 'SORTED']}, LRU: { batchSize: Number, maxMemorySize: Number, maxSize: Number }, FIFO: { batchSize: Number, maxMemorySize: Number, maxSize: Number }, SORTED: { batchSize: Number, maxMemorySize: Number, maxSize: Number } } }, clientNearConfiguration: { enabled: Boolean, nearStartSize: Number, nearEvictionPolicy: { kind: {type: String, enum: ['LRU', 'FIFO', 'SORTED']}, LRU: { batchSize: Number, maxMemorySize: Number, maxSize: Number }, FIFO: { batchSize: Number, maxMemorySize: Number, maxSize: Number }, SORTED: { batchSize: Number, maxMemorySize: Number, maxSize: Number } } }, evictionFilter: String, memoryPolicyName: String, dataRegionName: String, sqlIndexMaxInlineSize: Number, topologyValidator: String, diskPageCompression: {type: String, enum: ['SKIP_GARBAGE', 'ZSTD', 'LZ4', 'SNAPPY']}, diskPageCompressionLevel: Number }); Cache.index({name: 1, space: 1, clusters: 1}, {unique: true}); const Igfs = new Schema({ space: {type: ObjectId, ref: 'Space', index: true, required: true}, name: {type: String}, clusters: [{type: ObjectId, ref: 'Cluster'}], affinnityGroupSize: Number, blockSize: Number, streamBufferSize: Number, dataCacheName: String, metaCacheName: String, defaultMode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']}, dualModeMaxPendingPutsSize: Number, dualModePutExecutorService: String, dualModePutExecutorServiceShutdown: Boolean, fragmentizerConcurrentFiles: Number, fragmentizerEnabled: Boolean, fragmentizerThrottlingBlockLength: Number, fragmentizerThrottlingDelay: Number, ipcEndpointConfiguration: { type: {type: String, enum: ['SHMEM', 'TCP']}, host: String, port: Number, memorySize: Number, tokenDirectoryPath: String, threadCount: Number }, ipcEndpointEnabled: Boolean, maxSpaceSize: Number, maximumTaskRangeLength: Number, managementPort: Number, pathModes: [{path: String, mode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']}}], perNodeBatchSize: Number, perNodeParallelBatchCount: Number, prefetchBlocks: Number, sequentialReadsBeforePrefetch: Number, trashPurgeTimeout: Number, secondaryFileSystemEnabled: Boolean, secondaryFileSystem: { userName: String, kind: {type: String, enum: ['Caching', 'Kerberos', 'Custom'], default: 'Caching'}, uri: String, cfgPath: String, cfgPaths: [String], userNameMapper: { kind: {type: String, enum: ['Chained', 'Basic', 'Kerberos', 'Custom']}, Chained: { mappers: [{ kind: {type: String, enum: ['Basic', 'Kerberos', 'Custom']}, Basic: { defaultUserName: String, useDefaultUserName: Boolean, mappings: [{ name: String, value: String }] }, Kerberos: { instance: String, realm: String }, Custom: { className: String, } }] }, Basic: { defaultUserName: String, useDefaultUserName: Boolean, mappings: [{ name: String, value: String }] }, Kerberos: { instance: String, realm: String }, Custom: { className: String, } }, Kerberos: { keyTab: String, keyTabPrincipal: String, reloginInterval: Number }, Custom: { className: String } }, colocateMetadata: Boolean, relaxedConsistency: Boolean, updateFileLengthOnFlush: Boolean }); Igfs.index({name: 1, space: 1, clusters: 1}, {unique: true}); // Define Cluster schema. const Cluster = new Schema({ space: {type: ObjectId, ref: 'Space', index: true, required: true}, name: {type: String}, activeOnStart: {type: Boolean, default: true}, localHost: String, discovery: { localAddress: String, localPort: Number, localPortRange: Number, addressResolver: String, socketTimeout: Number, ackTimeout: Number, maxAckTimeout: Number, networkTimeout: Number, joinTimeout: Number, threadPriority: Number, heartbeatFrequency: Number, maxMissedHeartbeats: Number, maxMissedClientHeartbeats: Number, topHistorySize: Number, listener: String, dataExchange: String, metricsProvider: String, reconnectCount: Number, statisticsPrintFrequency: Number, ipFinderCleanFrequency: Number, authenticator: String, forceServerMode: Boolean, clientReconnectDisabled: Boolean, connectionRecoveryTimeout: Number, reconnectDelay: Number, soLinger: Number, kind: { type: String, enum: ['Vm', 'Multicast', 'S3', 'Cloud', 'GoogleStorage', 'Jdbc', 'SharedFs', 'ZooKeeper', 'Kubernetes'] }, Vm: { addresses: [String] }, Multicast: { multicastGroup: String, multicastPort: Number, responseWaitTime: Number, addressRequestAttempts: Number, localAddress: String, addresses: [String] }, S3: { bucketName: String, bucketEndpoint: String, SSEAlgorithm: String, clientConfiguration: { protocol: {type: String, enum: ['HTTP', 'HTTPS']}, maxConnections: Number, userAgentPrefix: String, userAgentSuffix: String, localAddress: String, proxyHost: String, proxyPort: Number, proxyUsername: String, proxyDomain: String, proxyWorkstation: String, retryPolicy: { kind: { type: String, enum: ['Default', 'DefaultMaxRetries', 'DynamoDB', 'DynamoDBMaxRetries', 'Custom', 'CustomClass'] }, DefaultMaxRetries: { maxErrorRetry: Number }, DynamoDBMaxRetries: { maxErrorRetry: Number }, Custom: { retryCondition: String, backoffStrategy: String, maxErrorRetry: Number, honorMaxErrorRetryInClientConfig: Boolean }, CustomClass: { className: String } }, maxErrorRetry: Number, socketTimeout: Number, connectionTimeout: Number, requestTimeout: Number, useReaper: Boolean, useGzip: Boolean, signerOverride: String, preemptiveBasicProxyAuth: Boolean, connectionTTL: Number, connectionMaxIdleMillis: Number, useTcpKeepAlive: Boolean, dnsResolver: String, responseMetadataCacheSize: Number, secureRandom: String, cacheResponseMetadata: {type: Boolean, default: true}, clientExecutionTimeout: Number, nonProxyHosts: String, socketSendBufferSizeHint: Number, socketReceiveBufferSizeHint: Number, useExpectContinue: {type: Boolean, default: true}, useThrottleRetries: {type: Boolean, default: true} } }, Cloud: { credential: String, credentialPath: String, identity: String, provider: String, regions: [String], zones: [String] }, GoogleStorage: { projectName: String, bucketName: String, serviceAccountP12FilePath: String, serviceAccountId: String, addrReqAttempts: String }, Jdbc: { initSchema: Boolean, dataSourceBean: String, dialect: { type: String, enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2'] } }, SharedFs: { path: String }, ZooKeeper: { curator: String, zkConnectionString: String, retryPolicy: { kind: { type: String, enum: ['ExponentialBackoff', 'BoundedExponentialBackoff', 'UntilElapsed', 'NTimes', 'OneTime', 'Forever', 'Custom'] }, ExponentialBackoff: { baseSleepTimeMs: Number, maxRetries: Number, maxSleepMs: Number }, BoundedExponentialBackoff: { baseSleepTimeMs: Number, maxSleepTimeMs: Number, maxRetries: Number }, UntilElapsed: { maxElapsedTimeMs: Number, sleepMsBetweenRetries: Number }, NTimes: { n: Number, sleepMsBetweenRetries: Number }, OneTime: { sleepMsBetweenRetry: Number }, Forever: { retryIntervalMs: Number }, Custom: { className: String } }, basePath: String, serviceName: String, allowDuplicateRegistrations: Boolean }, Kubernetes: { serviceName: String, namespace: String, masterUrl: String, accountToken: String } }, atomicConfiguration: { backups: Number, cacheMode: {type: String, enum: ['LOCAL', 'REPLICATED', 'PARTITIONED']}, atomicSequenceReserveSize: Number, affinity: { kind: {type: String, enum: ['Default', 'Rendezvous', 'Custom']}, Rendezvous: { affinityBackupFilter: String, partitions: Number, excludeNeighbors: Boolean }, Custom: { className: String } }, groupName: String }, binaryConfiguration: { idMapper: String, nameMapper: String, serializer: String, typeConfigurations: [{ typeName: String, idMapper: String, nameMapper: String, serializer: String, enum: Boolean, enumValues: [String] }], compactFooter: Boolean }, caches: [{type: ObjectId, ref: 'Cache'}], models: [{type: ObjectId, ref: 'DomainModel'}], clockSyncSamples: Number, clockSyncFrequency: Number, deploymentMode: {type: String, enum: ['PRIVATE', 'ISOLATED', 'SHARED', 'CONTINUOUS']}, discoveryStartupDelay: Number, igfsThreadPoolSize: Number, igfss: [{type: ObjectId, ref: 'Igfs'}], includeEventTypes: [String], eventStorage: { kind: {type: String, enum: ['Memory', 'Custom']}, Memory: { expireAgeMs: Number, expireCount: Number, filter: String }, Custom: { className: String } }, managementThreadPoolSize: Number, marshaller: { kind: {type: String, enum: ['OptimizedMarshaller', 'JdkMarshaller']}, OptimizedMarshaller: { poolSize: Number, requireSerializable: Boolean } }, marshalLocalJobs: Boolean, marshallerCacheKeepAliveTime: Number, marshallerCacheThreadPoolSize: Number, metricsExpireTime: Number, metricsHistorySize: Number, metricsLogFrequency: Number, metricsUpdateFrequency: Number, networkTimeout: Number, networkSendRetryDelay: Number, networkSendRetryCount: Number, communication: { listener: String, localAddress: String, localPort: Number, localPortRange: Number, sharedMemoryPort: Number, directBuffer: Boolean, directSendBuffer: Boolean, idleConnectionTimeout: Number, connectTimeout: Number, maxConnectTimeout: Number, reconnectCount: Number, socketSendBuffer: Number, socketReceiveBuffer: Number, messageQueueLimit: Number, slowClientQueueLimit: Number, tcpNoDelay: Boolean, ackSendThreshold: Number, unacknowledgedMessagesBufferSize: Number, socketWriteTimeout: Number, selectorsCount: Number, addressResolver: String, selectorSpins: Number, connectionsPerNode: Number, usePairedConnections: Boolean, filterReachableAddresses: Boolean }, connector: { enabled: Boolean, jettyPath: String, host: String, port: Number, portRange: Number, idleTimeout: Number, idleQueryCursorTimeout: Number, idleQueryCursorCheckFrequency: Number, receiveBufferSize: Number, sendBufferSize: Number, sendQueueLimit: Number, directBuffer: Boolean, noDelay: Boolean, selectorCount: Number, threadPoolSize: Number, messageInterceptor: String, secretKey: String, sslEnabled: Boolean, sslClientAuth: Boolean, sslFactory: String }, peerClassLoadingEnabled: Boolean, peerClassLoadingLocalClassPathExclude: [String], peerClassLoadingMissedResourcesCacheSize: Number, peerClassLoadingThreadPoolSize: Number, publicThreadPoolSize: Number, swapSpaceSpi: { kind: {type: String, enum: ['FileSwapSpaceSpi']}, FileSwapSpaceSpi: { baseDirectory: String, readStripesNumber: Number, maximumSparsity: Number, maxWriteQueueSize: Number, writeBufferSize: Number } }, systemThreadPoolSize: Number, timeServerPortBase: Number, timeServerPortRange: Number, transactionConfiguration: { defaultTxConcurrency: {type: String, enum: ['OPTIMISTIC', 'PESSIMISTIC']}, defaultTxIsolation: {type: String, enum: ['READ_COMMITTED', 'REPEATABLE_READ', 'SERIALIZABLE']}, defaultTxTimeout: Number, pessimisticTxLogLinger: Number, pessimisticTxLogSize: Number, txSerializableEnabled: Boolean, txManagerFactory: String, useJtaSynchronization: Boolean, txTimeoutOnPartitionMapExchange: Number, // 2.5 deadlockTimeout: Number // 2.8 }, sslEnabled: Boolean, sslContextFactory: { keyAlgorithm: String, keyStoreFilePath: String, keyStoreType: String, protocol: String, trustStoreFilePath: String, trustStoreType: String, trustManagers: [String], cipherSuites: [String], protocols: [String] }, rebalanceThreadPoolSize: Number, odbc: { odbcEnabled: Boolean, endpointAddress: String, socketSendBufferSize: Number, socketReceiveBufferSize: Number, maxOpenCursors: Number, threadPoolSize: Number }, attributes: [{name: String, value: String}], collision: { kind: {type: String, enum: ['Noop', 'PriorityQueue', 'FifoQueue', 'JobStealing', 'Custom']}, PriorityQueue: { parallelJobsNumber: Number, waitingJobsNumber: Number, priorityAttributeKey: String, jobPriorityAttributeKey: String, defaultPriority: Number, starvationIncrement: Number, starvationPreventionEnabled: Boolean }, FifoQueue: { parallelJobsNumber: Number, waitingJobsNumber: Number }, JobStealing: { activeJobsThreshold: Number, waitJobsThreshold: Number, messageExpireTime: Number, maximumStealingAttempts: Number, stealingEnabled: Boolean, stealingAttributes: [{name: String, value: String}], externalCollisionListener: String }, Custom: { class: String } }, failoverSpi: [{ kind: {type: String, enum: ['JobStealing', 'Never', 'Always', 'Custom']}, JobStealing: { maximumFailoverAttempts: Number }, Always: { maximumFailoverAttempts: Number }, Custom: { class: String } }], logger: { kind: {type: 'String', enum: ['Log4j2', 'Null', 'Java', 'JCL', 'SLF4J', 'Log4j', 'Custom']}, Log4j2: { level: {type: String, enum: ['OFF', 'FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL']}, path: String }, Log4j: { mode: {type: String, enum: ['Default', 'Path']}, level: {type: String, enum: ['OFF', 'FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL']}, path: String }, Custom: { class: String } }, cacheKeyConfiguration: [{ typeName: String, affinityKeyFieldName: String }], checkpointSpi: [{ kind: {type: String, enum: ['FS', 'Cache', 'S3', 'JDBC', 'Custom']}, FS: { directoryPaths: [String], checkpointListener: String }, Cache: { cache: {type: ObjectId, ref: 'Cache'}, checkpointListener: String }, S3: { awsCredentials: { kind: {type: String, enum: ['Basic', 'Properties', 'Anonymous', 'BasicSession', 'Custom']}, Properties: { path: String }, Custom: { className: String } }, bucketNameSuffix: String, bucketEndpoint: String, SSEAlgorithm: String, clientConfiguration: { protocol: {type: String, enum: ['HTTP', 'HTTPS']}, maxConnections: Number, userAgentPrefix: String, userAgentSuffix: String, localAddress: String, proxyHost: String, proxyPort: Number, proxyUsername: String, proxyDomain: String, proxyWorkstation: String, retryPolicy: { kind: { type: String, enum: ['Default', 'DefaultMaxRetries', 'DynamoDB', 'DynamoDBMaxRetries', 'Custom'] }, DefaultMaxRetries: { maxErrorRetry: Number }, DynamoDBMaxRetries: { maxErrorRetry: Number }, Custom: { retryCondition: String, backoffStrategy: String, maxErrorRetry: Number, honorMaxErrorRetryInClientConfig: Boolean } }, maxErrorRetry: Number, socketTimeout: Number, connectionTimeout: Number, requestTimeout: Number, useReaper: Boolean, useGzip: Boolean, signerOverride: String, preemptiveBasicProxyAuth: Boolean, connectionTTL: Number, connectionMaxIdleMillis: Number, useTcpKeepAlive: Boolean, dnsResolver: String, responseMetadataCacheSize: Number, secureRandom: String, cacheResponseMetadata: {type: Boolean, default: true}, clientExecutionTimeout: Number, nonProxyHosts: String, socketSendBufferSizeHint: Number, socketReceiveBufferSizeHint: Number, useExpectContinue: {type: Boolean, default: true}, useThrottleRetries: {type: Boolean, default: true} }, checkpointListener: String }, JDBC: { dataSourceBean: String, dialect: { type: String, enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2'] }, user: String, checkpointTableName: String, keyFieldName: String, keyFieldType: String, valueFieldName: String, valueFieldType: String, expireDateFieldName: String, expireDateFieldType: String, numberOfRetries: Number, checkpointListener: String }, Custom: { className: String } }], clientConnectorConfiguration: { enabled: Boolean, host: String, port: Number, portRange: Number, socketSendBufferSize: Number, socketReceiveBufferSize: Number, tcpNoDelay: {type: Boolean, default: true}, maxOpenCursorsPerConnection: Number, threadPoolSize: Number, idleTimeout: Number, jdbcEnabled: {type: Boolean, default: true}, odbcEnabled: {type: Boolean, default: true}, thinClientEnabled: {type: Boolean, default: true}, sslEnabled: Boolean, useIgniteSslContextFactory: {type: Boolean, default: true}, sslClientAuth: Boolean, sslContextFactory: String }, loadBalancingSpi: [{ kind: {type: String, enum: ['RoundRobin', 'Adaptive', 'WeightedRandom', 'Custom']}, RoundRobin: { perTask: Boolean }, Adaptive: { loadProbe: { kind: {type: String, enum: ['Job', 'CPU', 'ProcessingTime', 'Custom']}, Job: { useAverage: Boolean }, CPU: { useAverage: Boolean, useProcessors: Boolean, processorCoefficient: Number }, ProcessingTime: { useAverage: Boolean }, Custom: { className: String } } }, WeightedRandom: { nodeWeight: Number, useWeights: Boolean }, Custom: { className: String } }], deploymentSpi: { kind: {type: String, enum: ['URI', 'Local', 'Custom']}, URI: { uriList: [String], temporaryDirectoryPath: String, scanners: [String], listener: String, checkMd5: Boolean, encodeUri: Boolean }, Local: { listener: String }, Custom: { className: String } }, warmupClosure: String, hadoopConfiguration: { mapReducePlanner: { kind: {type: String, enum: ['Weighted', 'Custom']}, Weighted: { localMapperWeight: Number, remoteMapperWeight: Number, localReducerWeight: Number, remoteReducerWeight: Number, preferLocalReducerThresholdWeight: Number }, Custom: { className: String } }, finishedJobInfoTtl: Number, maxParallelTasks: Number, maxTaskQueueSize: Number, nativeLibraryNames: [String] }, serviceConfigurations: [{ name: String, service: String, maxPerNodeCount: Number, totalCount: Number, nodeFilter: { kind: {type: String, enum: ['Default', 'Exclude', 'IGFS', 'OnNodes', 'Custom']}, Exclude: { nodeId: String }, IGFS: { igfs: {type: ObjectId, ref: 'Igfs'} }, Custom: { className: String } }, cache: {type: ObjectId, ref: 'Cache'}, affinityKey: String }], cacheSanityCheckEnabled: {type: Boolean, default: true}, classLoader: String, consistentId: String, failureDetectionTimeout: Number, clientFailureDetectionTimeout: Number, systemWorkerBlockedTimeout: Number, workDirectory: String, igniteHome: String, lateAffinityAssignment: Boolean, utilityCacheKeepAliveTime: Number, asyncCallbackPoolSize: Number, dataStreamerThreadPoolSize: Number, queryThreadPoolSize: Number, stripedPoolSize: Number, serviceThreadPoolSize: Number, utilityCacheThreadPoolSize: Number, executorConfiguration: [{ name: String, size: Number }], dataStorageConfiguration: { systemRegionInitialSize: Number, systemRegionMaxSize: Number, pageSize: Number, concurrencyLevel: Number, defaultDataRegionConfiguration: { name: String, initialSize: Number, maxSize: Number, swapPath: String, pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']}, evictionThreshold: Number, emptyPagesPoolSize: Number, metricsEnabled: Boolean, metricsSubIntervalCount: Number, metricsRateTimeInterval: Number, persistenceEnabled: Boolean, checkpointPageBufferSize: Number }, dataRegionConfigurations: [{ name: String, initialSize: Number, maxSize: Number, swapPath: String, pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']}, evictionThreshold: Number, emptyPagesPoolSize: Number, metricsEnabled: Boolean, metricsSubIntervalCount: Number, metricsRateTimeInterval: Number, persistenceEnabled: Boolean, checkpointPageBufferSize: Number }], storagePath: String, metricsEnabled: Boolean, alwaysWriteFullPages: Boolean, checkpointFrequency: Number, checkpointThreads: Number, checkpointWriteOrder: {type: String, enum: ['RANDOM', 'SEQUENTIAL']}, walPath: String, walArchivePath: String, walMode: {type: String, enum: ['DEFAULT', 'LOG_ONLY', 'BACKGROUND', 'NONE']}, walSegments: Number, walSegmentSize: Number, walHistorySize: Number, walFlushFrequency: Number, walFsyncDelayNanos: Number, walRecordIteratorBufferSize: Number, lockWaitTime: Number, walBufferSize: Number, walThreadLocalBufferSize: Number, metricsSubIntervalCount: Number, metricsRateTimeInterval: Number, fileIOFactory: {type: String, enum: ['RANDOM', 'ASYNC']}, walAutoArchiveAfterInactivity: Number, writeThrottlingEnabled: Boolean, walCompactionEnabled: Boolean, checkpointReadLockTimeout: Number, maxWalArchiveSize: Number, walCompactionLevel: Number }, memoryConfiguration: { systemCacheInitialSize: Number, systemCacheMaxSize: Number, pageSize: Number, concurrencyLevel: Number, defaultMemoryPolicyName: String, defaultMemoryPolicySize: Number, memoryPolicies: [{ name: String, initialSize: Number, maxSize: Number, swapFilePath: String, pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']}, evictionThreshold: Number, emptyPagesPoolSize: Number, metricsEnabled: Boolean, subIntervals: Number, rateTimeInterval: Number }] }, longQueryWarningTimeout: Number, sqlConnectorConfiguration: { enabled: Boolean, host: String, port: Number, portRange: Number, socketSendBufferSize: Number, socketReceiveBufferSize: Number, tcpNoDelay: {type: Boolean, default: true}, maxOpenCursorsPerConnection: Number, threadPoolSize: Number }, persistenceStoreConfiguration: { enabled: Boolean, persistentStorePath: String, metricsEnabled: Boolean, alwaysWriteFullPages: Boolean, checkpointingFrequency: Number, checkpointingPageBufferSize: Number, checkpointingThreads: Number, walStorePath: String, walArchivePath: String, walMode: {type: String, enum: ['DEFAULT', 'LOG_ONLY', 'BACKGROUND', 'NONE']}, walSegments: Number, walSegmentSize: Number, walHistorySize: Number, walFlushFrequency: Number, walFsyncDelayNanos: Number, walRecordIteratorBufferSize: Number, lockWaitTime: Number, rateTimeInterval: Number, tlbSize: Number, subIntervals: Number, walAutoArchiveAfterInactivity: Number }, encryptionSpi: { kind: {type: String, enum: ['Noop', 'Keystore', 'Custom']}, Keystore: { keySize: Number, masterKeyName: String, keyStorePath: String }, Custom: { className: String } }, failureHandler: { kind: {type: String, enum: ['RestartProcess', 'StopNodeOnHalt', 'StopNode', 'Noop', 'Custom']}, ignoredFailureTypes: [{type: String, enum: ['SEGMENTATION', 'SYSTEM_WORKER_TERMINATION', 'SYSTEM_WORKER_BLOCKED', 'CRITICAL_ERROR', 'SYSTEM_CRITICAL_OPERATION_TIMEOUT']}], StopNodeOnHalt: { tryStop: Boolean, timeout: Number }, Custom: { className: String } }, localEventListeners: [{ className: String, eventTypes: [String] }], mvccVacuumThreadCount: Number, mvccVacuumFrequency: Number, authenticationEnabled: Boolean, sqlQueryHistorySize: Number, lifecycleBeans: [String], addressResolver: String, mBeanServer: String, networkCompressionLevel: Number, includeProperties: [String], cacheStoreSessionListenerFactories: [String], autoActivationEnabled: {type: Boolean, default: true}, sqlSchemas: [String], communicationFailureResolver: String }); Cluster.index({name: 1, space: 1}, {unique: true}); // Define Notebook schema. const Notebook = new Schema({ space: {type: ObjectId, ref: 'Space', index: true, required: true}, name: String, expandedParagraphs: [Number], paragraphs: [{ name: String, query: String, editor: Boolean, result: {type: String, enum: ['none', 'table', 'bar', 'pie', 'line', 'area']}, pageSize: Number, timeLineSpan: String, maxPages: Number, hideSystemColumns: Boolean, cacheName: String, useAsDefaultSchema: Boolean, chartsOptions: {barChart: {stacked: Boolean}, areaChart: {style: String}}, rate: { value: Number, unit: Number }, qryType: String, nonCollocatedJoins: {type: Boolean, default: false}, enforceJoinOrder: {type: Boolean, default: false}, lazy: {type: Boolean, default: false}, collocated: Boolean }] }); Notebook.index({name: 1, space: 1}, {unique: true}); // Define Activities schema. const Activities = new Schema({ owner: {type: ObjectId, ref: 'Account'}, date: Date, group: String, action: String, amount: {type: Number, default: 0} }); Activities.index({owner: 1, group: 1, action: 1, date: 1}, {unique: true}); // Define Notifications schema. const Notifications = new Schema({ owner: {type: ObjectId, ref: 'Account'}, date: Date, message: String, isShown: Boolean }); return { Space, Account, DomainModel, Cache, Igfs, Cluster, Notebook, Activities, Notifications }; };