Skip to content

Commit 5bd47e1

Browse files
committed
Update schema.proto
1 parent 75a4610 commit 5bd47e1

13 files changed

+2282
-1199
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
make dev
2222
- name: Start immudb container
2323
run: |
24-
docker run -d --health-cmd "immuadmin status" --health-interval 10s --health-timeout 5s --health-retries 5 -v ${{ github.workspace }}/tests/certs/my.key.pem:/key.pem -p 3322:3322 codenotary/immudb:1.9DOM --signingKey=/key.pem
24+
docker run -d --health-cmd "immuadmin status" --health-interval 10s --health-timeout 5s --health-retries 5 -v ${{ github.workspace }}/tests/certs/my.key.pem:/key.pem -p 3322:3322 codenotary/immudb:1.9.3 --signingKey=/key.pem
2525
docker run -d --health-cmd "immuadmin status" --health-interval 10s --health-timeout 5s --health-retries 5 -v ${{ github.workspace }}/tests/certs/my.key.pem:/key.pem -p 3333:3322 codenotary/immudb:1.5.0 --signingKey=/key.pem
2626
docker run -d --health-cmd "immuadmin status" --health-interval 10s --health-timeout 5s --health-retries 5 -v ${{ github.workspace }}/tests/certs/my.key.pem:/key.pem -p 3344:3322 codenotary/immudb:1.4.1 --signingKey=/key.pem
2727
docker run -d --health-cmd "immuadmin status" --health-interval 10s --health-timeout 5s --health-retries 5 -v ${{ github.workspace }}/tests/certs/my.key.pem:/key.pem -p 3355:3322 codenotary/immudb:1.4.0 --signingKey=/key.pem

immudb/client.py

+9-13
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ def openSession(self, username, password, database=b"defaultdb"):
326326
session_response = self._stub.OpenSession(
327327
req)
328328
self._stub = self._set_session_id_interceptor(session_response)
329-
return transaction.Tx(self._stub, session_response, self.channel)
329+
return transaction.Tx(self._stub, database, session_response, self.channel)
330330

331331
def closeSession(self):
332332
"""Closes unmanaged session
@@ -1613,7 +1613,7 @@ def sqlExec(self, stmt, params={}, noWait=False):
16131613

16141614
return sqlexec.call(self._stub, self._rs, stmt, params, noWait)
16151615

1616-
def sqlQuery(self, query, params={}, columnNameMode=constants.COLUMN_NAME_MODE_NONE):
1616+
def sqlQuery(self, query, params={}, columnNameMode=constants.COLUMN_NAME_MODE_NONE, acceptStream=False):
16171617
"""Queries the database using SQL
16181618
Args:
16191619
query: a query in immudb SQL dialect.
@@ -1624,17 +1624,12 @@ def sqlQuery(self, query, params={}, columnNameMode=constants.COLUMN_NAME_MODE_N
16241624
16251625
['table1', 'table2']
16261626
"""
1627-
ret = sqlquery.call(self._stub, self._rs, query,
1628-
params, columnNameMode)
1629-
if columnNameMode in [constants.COLUMN_NAME_MODE_DATABASE, constants.COLUMN_NAME_MODE_FULL]:
1630-
# newer DB version don't insert database name anymore, we need to
1631-
# process it manually
1632-
for i, t in enumerate(ret):
1633-
newkeys = [
1634-
x.replace("[@DB]", self._currentdb.decode("utf-8")) for x in t.keys()]
1635-
k = dict(zip(newkeys, list(t.values())))
1636-
ret[i] = k
1637-
return ret
1627+
it = sqlquery.call(self._stub, self._rs, query,
1628+
params, columnNameMode, self._currentdb)
1629+
if acceptStream:
1630+
return it
1631+
1632+
return list(it)
16381633

16391634
def listTables(self):
16401635
"""List all tables in the current database
@@ -1710,6 +1705,7 @@ def verifiableSQLGet(self, table: str, primaryKeys: List[datatypesv2.PrimaryKey]
17101705

17111706
# immudb-py only
17121707

1708+
17131709
def getAllValues(self, keys: list): # immudb-py only
17141710
resp = batchGet.call(self._stub, self._rs, keys)
17151711
return resp

immudb/datatypesv2.py

+116-31
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,10 @@ class ServerInfoRequest(GRPCTransformable):
401401
@dataclass
402402
class ServerInfoResponse(GRPCTransformable):
403403
version: str = None
404+
startedAt: int = None
405+
numTransactions: int = None
406+
numDatabases: int = None
407+
databasesDiskSize: int = None
404408

405409

406410
@dataclass
@@ -737,28 +741,74 @@ class DatabaseNullableSettings(GRPCTransformable):
737741
syncFrequency: NullableMilliseconds = None
738742
writeBufferSize: NullableUint32 = None
739743
ahtSettings: AHTNullableSettings = None
744+
maxActiveTransactions: NullableUint32 = None
745+
mvccReadSetLimit: NullableUint32 = None
746+
vLogCacheSize: NullableUint32 = None
747+
truncationSettings: TruncationNullableSettings = None
748+
embeddedValues: NullableBool = None
749+
preallocFiles: NullableBool = None
740750

741751
def _getHumanDataClass(self):
742752
return grpcHumanizator(self, DatabaseSettingsV2)
743753

744754

755+
@dataclass
756+
class TruncationNullableSettings(GRPCTransformable):
757+
retentionPeriod: NullableMilliseconds = None
758+
truncationFrequency: NullableMilliseconds = None
759+
760+
def _getHumanDataClass(self):
761+
return grpcHumanizator(self, TruncationSettings)
762+
763+
745764
@dataclass
746765
class ReplicationSettings(GRPCTransformable):
747766
replica: Optional[bool] = None
748-
masterDatabase: Optional[str] = None
749-
masterAddress: Optional[str] = None
750-
masterPort: Optional[int] = None
751-
followerUsername: Optional[str] = None
752-
followerPassword: Optional[str] = None
767+
primaryDatabase: Optional[str] = None
768+
primaryHost: Optional[str] = None
769+
primaryPort: Optional[int] = None
770+
primaryUsername: Optional[str] = None
771+
primaryPassword: Optional[str] = None
772+
syncReplication: Optional[bool] = None
773+
syncAcks: Optional[int] = None
774+
prefetchTxBufferSize: Optional[int] = None
775+
replicationCommitConcurrency: Optional[int] = None
776+
allowTxDiscarding: Optional[bool] = None
777+
skipIntegrityCheck: Optional[bool] = None
778+
waitForIndexing: Optional[bool] = None
753779

754780
def _getGRPC(self):
755781
return schema.ReplicationNullableSettings(
756782
replica=NullableBool(self.replica)._getGRPC(),
757-
masterDatabase=NullableString(self.masterDatabase)._getGRPC(),
758-
masterAddress=NullableString(self.masterAddress)._getGRPC(),
759-
masterPort=NullableUint32(self.masterPort)._getGRPC(),
760-
followerUsername=NullableString(self.followerUsername)._getGRPC(),
761-
followerPassword=NullableString(self.followerPassword)._getGRPC()
783+
primaryDatabase=NullableString(self.primaryDatabase)._getGRPC(),
784+
primaryHost=NullableString(self.primaryHost)._getGRPC(),
785+
primaryPort=NullableUint32(self.primaryPort)._getGRPC(),
786+
primaryUsername=NullableString(self.primaryUsername)._getGRPC(),
787+
primaryPassword=NullableString(self.primaryUsername)._getGRPC(),
788+
syncReplication=NullableBool(self.syncReplication)._getGRPC(),
789+
syncAcks=NullableUint32(self.syncAcks)._getGRPC(),
790+
prefetchTxBufferSize=NullableUint32(
791+
self.prefetchTxBufferSize)._getGRPC(),
792+
replicationCommitConcurrency=NullableUint32(
793+
self.replicationCommitConcurrency)._getGRPC(),
794+
allowTxDiscarding=NullableBool(self.allowTxDiscarding)._getGRPC(),
795+
skipIntegrityCheck=NullableBool(
796+
self.skipIntegrityCheck)._getGRPC(),
797+
waitForIndexing=NullableBool(self.waitForIndexing)._getGRPC(),
798+
)
799+
800+
801+
@dataclass
802+
class TruncationSettings(GRPCTransformable):
803+
retentionPeriod: Optional[int]
804+
truncationFrequency: Optional[int]
805+
806+
def _getGRPC(self):
807+
return schema.TruncationNullableSettings(
808+
retentionPeriod=NullableMilliseconds(
809+
self.retentionPeriod)._getGRPC(),
810+
truncationFrequency=NullableMilliseconds(
811+
self.truncationFrequency)._getGRPC(),
762812
)
763813

764814

@@ -777,6 +827,8 @@ class IndexSettings(GRPCTransformable):
777827
commitLogMaxOpenedFiles: Optional[int] = None
778828
flushBufferSize: Optional[int] = None
779829
cleanupPercentage: Optional[float] = None
830+
maxBulkSize: Optional[int] = None
831+
bulkPreparationTimeout: Optional[int] = None
780832

781833
def _getGRPC(self):
782834
return schema.IndexNullableSettings(
@@ -798,7 +850,10 @@ def _getGRPC(self):
798850
commitLogMaxOpenedFiles=NullableUint32(
799851
self.commitLogMaxOpenedFiles)._getGRPC(),
800852
flushBufferSize=NullableUint32(self.flushBufferSize)._getGRPC(),
801-
cleanupPercentage=NullableFloat(self.cleanupPercentage)._getGRPC()
853+
cleanupPercentage=NullableFloat(self.cleanupPercentage)._getGRPC(),
854+
maxBulkSize=NullableUint32(self.maxBulkSize)._getGRPC(),
855+
bulkPreparationTimeout=NullableMilliseconds(
856+
self.bulkPreparationTimeout)._getGRPC(),
802857
)
803858

804859

@@ -817,36 +872,48 @@ def _getGRPC(self):
817872
@dataclass
818873
class DatabaseSettingsV2(GRPCTransformable):
819874
replicationSettings: ReplicationSettings = None
820-
fileSize: Optional[int] = None
821-
maxKeyLen: Optional[int] = None
822-
maxValueLen: Optional[int] = None
823-
maxTxEntries: Optional[int] = None
824-
excludeCommitTime: Optional[bool] = None
875+
fileSize: Optional[int] = None
876+
maxKeyLen: Optional[int] = None
877+
maxValueLen: Optional[int] = None
878+
maxTxEntries: Optional[int] = None
879+
excludeCommitTime: Optional[bool] = None
825880
maxConcurrency: Optional[int] = None
826881
maxIOConcurrency: Optional[int] = None
827882
txLogCacheSize: Optional[int] = None
828-
vLogMaxOpenedFiles: Optional[int] = None
829-
txLogMaxOpenedFiles: Optional[int] = None
830-
commitLogMaxOpenedFiles: Optional[int] = None
831-
indexSettings: IndexSettings = None
883+
vLogMaxOpenedFiles: Optional[int] = None
884+
txLogMaxOpenedFiles: Optional[int] = None
885+
commitLogMaxOpenedFiles: Optional[int] = None
886+
indexSettings: IndexSettings = None
832887
writeTxHeaderVersion: Optional[int] = None
833-
autoload: Optional[bool] = None
834-
readTxPoolSize: Optional[int] = None
888+
autoload: Optional[bool] = None
889+
readTxPoolSize: Optional[int] = None
835890
syncFrequency: NullableMilliseconds = None
836891
writeBufferSize: Optional[int] = None
837892
ahtSettings: AHTSettings = None
893+
maxActiveTransactions: Optional[int] = None
894+
mvccReadSetLimit: Optional[int] = None
895+
vLogCacheSize: Optional[int] = None
896+
truncationSettings: TruncationSettings = None
897+
embeddedValues: Optional[bool] = None
898+
preallocFiles: Optional[bool] = None
838899

839900
def _getGRPC(self):
840901
indexSettings = None
841902
if self.indexSettings != None:
842903
indexSettings = self.indexSettings._getGRPC()
904+
843905
replicationSettings = None
844906
if self.replicationSettings != None:
845907
replicationSettings = self.replicationSettings._getGRPC()
908+
846909
ahtSettings = None
847910
if self.ahtSettings != None:
848911
ahtSettings = self.ahtSettings._getGRPC()
849912

913+
truncSettings = None
914+
if self.truncationSettings != None:
915+
truncSettings = self.truncationSettings._getGRPC()
916+
850917
return schema.DatabaseNullableSettings(
851918
replicationSettings=replicationSettings,
852919
fileSize=NullableUint32(self.fileSize)._getGRPC(),
@@ -870,18 +937,32 @@ def _getGRPC(self):
870937
readTxPoolSize=NullableUint32(self.readTxPoolSize)._getGRPC(),
871938
syncFrequency=NullableMilliseconds(self.syncFrequency)._getGRPC(),
872939
writeBufferSize=NullableUint32(self.writeBufferSize)._getGRPC(),
873-
ahtSettings=ahtSettings
940+
ahtSettings=ahtSettings,
941+
maxActiveTransactions=NullableUint32(
942+
self.maxActiveTransactions)._getGRPC(),
943+
mvccReadSetLimit=NullableUint32(self.mvccReadSetLimit)._getGRPC(),
944+
vLogCacheSize=NullableUint32(self.vLogCacheSize)._getGRPC(),
945+
truncationSettings=truncSettings,
946+
embeddedValues=NullableBool(self.embeddedValues)._getGRPC(),
947+
preallocFiles=NullableBool(self.preallocFiles)._getGRPC(),
874948
)
875949

876950

877951
@dataclass
878952
class ReplicationNullableSettings(GRPCTransformable):
879953
replica: NullableBool = None
880-
masterDatabase: NullableString = None
881-
masterAddress: NullableString = None
882-
masterPort: NullableUint32 = None
883-
followerUsername: NullableString = None
884-
followerPassword: NullableString = None
954+
primaryDatabase: NullableString = None
955+
primaryHost: NullableString = None
956+
primaryPort: NullableUint32 = None
957+
primaryUsername: NullableString = None
958+
primaryPassword: NullableString = None
959+
syncReplication: NullableBool = None
960+
syncAcks: NullableUint32 = None
961+
prefetchTxBufferSize: NullableUint32 = None,
962+
replicationCommitConcurrency: NullableUint32 = None,
963+
allowTxDiscarding: NullableBool = None,
964+
skipIntegrityCheck: NullableBool = None,
965+
waitForIndexing: NullableBool = None,
885966

886967
def _getHumanDataClass(self):
887968
return grpcHumanizator(self, ReplicationSettings)
@@ -902,6 +983,8 @@ class IndexNullableSettings(GRPCTransformable):
902983
commitLogMaxOpenedFiles: NullableUint32 = None
903984
flushBufferSize: NullableUint32 = None
904985
cleanupPercentage: NullableFloat = None
986+
maxBulkSize: NullableUint32 = None
987+
bulkPreparationTimeout: NullableMilliseconds = None
905988

906989
def _getHumanDataClass(self):
907990
return grpcHumanizator(self, IndexSettings)
@@ -1035,7 +1118,7 @@ class DatabaseListRequestV2(GRPCTransformable):
10351118

10361119
@dataclass
10371120
class DatabaseListResponseV2(GRPCTransformable):
1038-
databases: List[Union[DatabaseWithSettings, DatabaseWithSettingsV2]] = None
1121+
databases: List[Union[DatabaseWithSettings, DatabaseInfo]] = None
10391122

10401123
def _getHumanDataClass(self):
10411124
return DatabaseListResponseV2(databases=[toConvert._getHumanDataClass() for toConvert in self.databases])
@@ -1048,14 +1131,16 @@ class DatabaseWithSettings(GRPCTransformable):
10481131
loaded: bool = None
10491132

10501133
def _getHumanDataClass(self):
1051-
return grpcHumanizator(self, DatabaseWithSettingsV2)
1134+
return grpcHumanizator(self, DatabaseInfo)
10521135

10531136

10541137
@dataclass
1055-
class DatabaseWithSettingsV2(GRPCTransformable):
1138+
class DatabaseInfo(GRPCTransformable):
10561139
name: str = None
10571140
settings: DatabaseSettingsV2 = None
10581141
loaded: bool = None
1142+
diskSize: int = None
1143+
numTransactions: int = None
10591144

10601145

10611146
@dataclass

0 commit comments

Comments
 (0)