Merge branch 'AIRAVATA-3315-storage-quotas' into develop
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/appcatalog/gatewayprofile/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/appcatalog/gatewayprofile/ttypes.py
index 6908a39..1866336 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/appcatalog/gatewayprofile/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/appcatalog/gatewayprofile/ttypes.py
@@ -322,6 +322,7 @@
- loginUserName
- fileSystemRootLocation
- resourceSpecificCredentialStoreToken
+ - userStorageQuota
"""
thrift_spec = (
@@ -330,13 +331,15 @@
(2, TType.STRING, 'loginUserName', 'UTF8', None, ), # 2
(3, TType.STRING, 'fileSystemRootLocation', 'UTF8', None, ), # 3
(4, TType.STRING, 'resourceSpecificCredentialStoreToken', 'UTF8', None, ), # 4
+ (5, TType.I64, 'userStorageQuota', None, None, ), # 5
)
- def __init__(self, storageResourceId=None, loginUserName=None, fileSystemRootLocation=None, resourceSpecificCredentialStoreToken=None,):
+ def __init__(self, storageResourceId=None, loginUserName=None, fileSystemRootLocation=None, resourceSpecificCredentialStoreToken=None, userStorageQuota=None,):
self.storageResourceId = storageResourceId
self.loginUserName = loginUserName
self.fileSystemRootLocation = fileSystemRootLocation
self.resourceSpecificCredentialStoreToken = resourceSpecificCredentialStoreToken
+ self.userStorageQuota = userStorageQuota
def read(self, iprot):
if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -367,6 +370,11 @@
self.resourceSpecificCredentialStoreToken = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
else:
iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.I64:
+ self.userStorageQuota = iprot.readI64()
+ else:
+ iprot.skip(ftype)
else:
iprot.skip(ftype)
iprot.readFieldEnd()
@@ -393,6 +401,10 @@
oprot.writeFieldBegin('resourceSpecificCredentialStoreToken', TType.STRING, 4)
oprot.writeString(self.resourceSpecificCredentialStoreToken.encode('utf-8') if sys.version_info[0] == 2 else self.resourceSpecificCredentialStoreToken)
oprot.writeFieldEnd()
+ if self.userStorageQuota is not None:
+ oprot.writeFieldBegin('userStorageQuota', TType.I64, 5)
+ oprot.writeI64(self.userStorageQuota)
+ oprot.writeFieldEnd()
oprot.writeFieldStop()
oprot.writeStructEnd()
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/gatewayprofile/StoragePreference.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/gatewayprofile/StoragePreference.java
index b8754ed..992736f 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/gatewayprofile/StoragePreference.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/gatewayprofile/StoragePreference.java
@@ -32,6 +32,7 @@
private static final org.apache.thrift.protocol.TField LOGIN_USER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("loginUserName", org.apache.thrift.protocol.TType.STRING, (short)2);
private static final org.apache.thrift.protocol.TField FILE_SYSTEM_ROOT_LOCATION_FIELD_DESC = new org.apache.thrift.protocol.TField("fileSystemRootLocation", org.apache.thrift.protocol.TType.STRING, (short)3);
private static final org.apache.thrift.protocol.TField RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("resourceSpecificCredentialStoreToken", org.apache.thrift.protocol.TType.STRING, (short)4);
+ private static final org.apache.thrift.protocol.TField USER_STORAGE_QUOTA_FIELD_DESC = new org.apache.thrift.protocol.TField("userStorageQuota", org.apache.thrift.protocol.TType.I64, (short)5);
private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new StoragePreferenceStandardSchemeFactory();
private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new StoragePreferenceTupleSchemeFactory();
@@ -40,13 +41,15 @@
private java.lang.String loginUserName; // optional
private java.lang.String fileSystemRootLocation; // optional
private java.lang.String resourceSpecificCredentialStoreToken; // optional
+ private long userStorageQuota; // optional
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
STORAGE_RESOURCE_ID((short)1, "storageResourceId"),
LOGIN_USER_NAME((short)2, "loginUserName"),
FILE_SYSTEM_ROOT_LOCATION((short)3, "fileSystemRootLocation"),
- RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN((short)4, "resourceSpecificCredentialStoreToken");
+ RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN((short)4, "resourceSpecificCredentialStoreToken"),
+ USER_STORAGE_QUOTA((short)5, "userStorageQuota");
private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
@@ -69,6 +72,8 @@
return FILE_SYSTEM_ROOT_LOCATION;
case 4: // RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN
return RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN;
+ case 5: // USER_STORAGE_QUOTA
+ return USER_STORAGE_QUOTA;
default:
return null;
}
@@ -109,7 +114,9 @@
}
// isset id assignments
- private static final _Fields optionals[] = {_Fields.LOGIN_USER_NAME,_Fields.FILE_SYSTEM_ROOT_LOCATION,_Fields.RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN};
+ private static final int __USERSTORAGEQUOTA_ISSET_ID = 0;
+ private byte __isset_bitfield = 0;
+ private static final _Fields optionals[] = {_Fields.LOGIN_USER_NAME,_Fields.FILE_SYSTEM_ROOT_LOCATION,_Fields.RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN,_Fields.USER_STORAGE_QUOTA};
public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -121,6 +128,8 @@
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
tmpMap.put(_Fields.RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("resourceSpecificCredentialStoreToken", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+ tmpMap.put(_Fields.USER_STORAGE_QUOTA, new org.apache.thrift.meta_data.FieldMetaData("userStorageQuota", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(StoragePreference.class, metaDataMap);
}
@@ -139,6 +148,7 @@
* Performs a deep copy on <i>other</i>.
*/
public StoragePreference(StoragePreference other) {
+ __isset_bitfield = other.__isset_bitfield;
if (other.isSetStorageResourceId()) {
this.storageResourceId = other.storageResourceId;
}
@@ -151,6 +161,7 @@
if (other.isSetResourceSpecificCredentialStoreToken()) {
this.resourceSpecificCredentialStoreToken = other.resourceSpecificCredentialStoreToken;
}
+ this.userStorageQuota = other.userStorageQuota;
}
public StoragePreference deepCopy() {
@@ -163,6 +174,8 @@
this.loginUserName = null;
this.fileSystemRootLocation = null;
this.resourceSpecificCredentialStoreToken = null;
+ setUserStorageQuotaIsSet(false);
+ this.userStorageQuota = 0;
}
public java.lang.String getStorageResourceId() {
@@ -257,6 +270,28 @@
}
}
+ public long getUserStorageQuota() {
+ return this.userStorageQuota;
+ }
+
+ public void setUserStorageQuota(long userStorageQuota) {
+ this.userStorageQuota = userStorageQuota;
+ setUserStorageQuotaIsSet(true);
+ }
+
+ public void unsetUserStorageQuota() {
+ __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __USERSTORAGEQUOTA_ISSET_ID);
+ }
+
+ /** Returns true if field userStorageQuota is set (has been assigned a value) and false otherwise */
+ public boolean isSetUserStorageQuota() {
+ return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __USERSTORAGEQUOTA_ISSET_ID);
+ }
+
+ public void setUserStorageQuotaIsSet(boolean value) {
+ __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __USERSTORAGEQUOTA_ISSET_ID, value);
+ }
+
public void setFieldValue(_Fields field, java.lang.Object value) {
switch (field) {
case STORAGE_RESOURCE_ID:
@@ -291,6 +326,14 @@
}
break;
+ case USER_STORAGE_QUOTA:
+ if (value == null) {
+ unsetUserStorageQuota();
+ } else {
+ setUserStorageQuota((java.lang.Long)value);
+ }
+ break;
+
}
}
@@ -308,6 +351,9 @@
case RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN:
return getResourceSpecificCredentialStoreToken();
+ case USER_STORAGE_QUOTA:
+ return getUserStorageQuota();
+
}
throw new java.lang.IllegalStateException();
}
@@ -327,6 +373,8 @@
return isSetFileSystemRootLocation();
case RESOURCE_SPECIFIC_CREDENTIAL_STORE_TOKEN:
return isSetResourceSpecificCredentialStoreToken();
+ case USER_STORAGE_QUOTA:
+ return isSetUserStorageQuota();
}
throw new java.lang.IllegalStateException();
}
@@ -382,6 +430,15 @@
return false;
}
+ boolean this_present_userStorageQuota = true && this.isSetUserStorageQuota();
+ boolean that_present_userStorageQuota = true && that.isSetUserStorageQuota();
+ if (this_present_userStorageQuota || that_present_userStorageQuota) {
+ if (!(this_present_userStorageQuota && that_present_userStorageQuota))
+ return false;
+ if (this.userStorageQuota != that.userStorageQuota)
+ return false;
+ }
+
return true;
}
@@ -405,6 +462,10 @@
if (isSetResourceSpecificCredentialStoreToken())
hashCode = hashCode * 8191 + resourceSpecificCredentialStoreToken.hashCode();
+ hashCode = hashCode * 8191 + ((isSetUserStorageQuota()) ? 131071 : 524287);
+ if (isSetUserStorageQuota())
+ hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(userStorageQuota);
+
return hashCode;
}
@@ -456,6 +517,16 @@
return lastComparison;
}
}
+ lastComparison = java.lang.Boolean.valueOf(isSetUserStorageQuota()).compareTo(other.isSetUserStorageQuota());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (isSetUserStorageQuota()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userStorageQuota, other.userStorageQuota);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
return 0;
}
@@ -513,6 +584,12 @@
}
first = false;
}
+ if (isSetUserStorageQuota()) {
+ if (!first) sb.append(", ");
+ sb.append("userStorageQuota:");
+ sb.append(this.userStorageQuota);
+ first = false;
+ }
sb.append(")");
return sb.toString();
}
@@ -536,6 +613,8 @@
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
try {
+ // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+ __isset_bitfield = 0;
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
@@ -592,6 +671,14 @@
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
+ case 5: // USER_STORAGE_QUOTA
+ if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+ struct.userStorageQuota = iprot.readI64();
+ struct.setUserStorageQuotaIsSet(true);
+ } else {
+ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+ }
+ break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
@@ -631,6 +718,11 @@
oprot.writeFieldEnd();
}
}
+ if (struct.isSetUserStorageQuota()) {
+ oprot.writeFieldBegin(USER_STORAGE_QUOTA_FIELD_DESC);
+ oprot.writeI64(struct.userStorageQuota);
+ oprot.writeFieldEnd();
+ }
oprot.writeFieldStop();
oprot.writeStructEnd();
}
@@ -659,7 +751,10 @@
if (struct.isSetResourceSpecificCredentialStoreToken()) {
optionals.set(2);
}
- oprot.writeBitSet(optionals, 3);
+ if (struct.isSetUserStorageQuota()) {
+ optionals.set(3);
+ }
+ oprot.writeBitSet(optionals, 4);
if (struct.isSetLoginUserName()) {
oprot.writeString(struct.loginUserName);
}
@@ -669,6 +764,9 @@
if (struct.isSetResourceSpecificCredentialStoreToken()) {
oprot.writeString(struct.resourceSpecificCredentialStoreToken);
}
+ if (struct.isSetUserStorageQuota()) {
+ oprot.writeI64(struct.userStorageQuota);
+ }
}
@Override
@@ -676,7 +774,7 @@
org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
struct.storageResourceId = iprot.readString();
struct.setStorageResourceIdIsSet(true);
- java.util.BitSet incoming = iprot.readBitSet(3);
+ java.util.BitSet incoming = iprot.readBitSet(4);
if (incoming.get(0)) {
struct.loginUserName = iprot.readString();
struct.setLoginUserNameIsSet(true);
@@ -689,6 +787,10 @@
struct.resourceSpecificCredentialStoreToken = iprot.readString();
struct.setResourceSpecificCredentialStoreTokenIsSet(true);
}
+ if (incoming.get(3)) {
+ struct.userStorageQuota = iprot.readI64();
+ struct.setUserStorageQuotaIsSet(true);
+ }
}
}
diff --git a/modules/ide-integration/src/main/resources/database_scripts/init/01-databases.sql b/modules/ide-integration/src/main/resources/database_scripts/init/01-databases.sql
index 4ac2531..d4c51ad 100644
--- a/modules/ide-integration/src/main/resources/database_scripts/init/01-databases.sql
+++ b/modules/ide-integration/src/main/resources/database_scripts/init/01-databases.sql
@@ -1560,6 +1560,7 @@
`GATEWAY_ID` varchar(255) NOT NULL,
`STORAGE_RESOURCE_ID` varchar(255) NOT NULL,
`LOGIN_USERNAME` varchar(255) DEFAULT NULL,
+ `USER_STORAGE_QUOTA` bigint(20) DEFAULT 0,
`FS_ROOT_LOCATION` varchar(255) DEFAULT NULL,
`RESOURCE_CS_TOKEN` varchar(255) DEFAULT NULL,
PRIMARY KEY (`GATEWAY_ID`,`STORAGE_RESOURCE_ID`),
@@ -1573,7 +1574,7 @@
LOCK TABLES `STORAGE_PREFERENCE` WRITE;
/*!40000 ALTER TABLE `STORAGE_PREFERENCE` DISABLE KEYS */;
-INSERT INTO `STORAGE_PREFERENCE` VALUES ('default','airavata.host_77116e91-f042-4d3a-ab9c-3e7b4ebcd5bd','root','/var/www/portals/gateway-user-data','46a99a5a-8b55-4982-bfd7-90fe72b00d46');
+INSERT INTO `STORAGE_PREFERENCE` VALUES ('default','airavata.host_77116e91-f042-4d3a-ab9c-3e7b4ebcd5bd','root', 0,'/var/www/portals/gateway-user-data','46a99a5a-8b55-4982-bfd7-90fe72b00d46');
/*!40000 ALTER TABLE `STORAGE_PREFERENCE` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/modules/ide-integration/src/main/resources/database_scripts/init/03-appcatalog-migrations.sql b/modules/ide-integration/src/main/resources/database_scripts/init/03-appcatalog-migrations.sql
index 0119ceb..d77d507 100644
--- a/modules/ide-integration/src/main/resources/database_scripts/init/03-appcatalog-migrations.sql
+++ b/modules/ide-integration/src/main/resources/database_scripts/init/03-appcatalog-migrations.sql
@@ -14,3 +14,18 @@
alter table GROUP_COMPUTE_RESOURCE_PREFERENCE drop column IF EXISTS RESERVATION;
alter table GROUP_COMPUTE_RESOURCE_PREFERENCE drop column IF EXISTS RESERVATION_START_TIME;
alter table GROUP_COMPUTE_RESOURCE_PREFERENCE drop column IF EXISTS RESERVATION_END_TIME;
+
+-- AIRAVATA-3343: Add UserStorageQuota entry to StoragePreferences table
+SET @AddUserStorageQuota = (SELECT IF(
+ (SELECT COUNT(*)
+ FROM INFORMATION_SCHEMA.COLUMNS
+ WHERE table_name = 'STORAGE_PREFERENCE'
+ AND column_name = 'USER_STORAGE_QUOTA'
+ ) > 0,
+ "SELECT 1",
+ "ALTER TABLE STORAGE_PREFERENCE ADD USER_STORAGE_QUOTA BIGINT DEFAULT 0"
+));
+
+PREPARE stmt FROM @AddUserStorageQuota;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/StoragePreferenceEntity.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/StoragePreferenceEntity.java
index 8031b8f..c7c8c16 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/StoragePreferenceEntity.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/StoragePreferenceEntity.java
@@ -40,6 +40,9 @@
@Id
private String storageResourceId;
+ @Column(name = "USER_STORAGE_QUOTA")
+ private Long userStorageQuota;
+
@Column(name = "FS_ROOT_LOCATION")
private String fileSystemRootLocation;
@@ -103,4 +106,12 @@
public void setGatewayProfileResource(GatewayProfileEntity gatewayProfileResource) {
this.gatewayProfileResource = gatewayProfileResource;
}
+
+ public Long getUserStorageQuota() {
+ return userStorageQuota;
+ }
+
+ public void setUserStorageQuota(Long userStorageQuota) {
+ this.userStorageQuota = userStorageQuota;
+ }
}
diff --git a/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql b/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
index ab1bcab..3e77f16 100644
--- a/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
+++ b/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
@@ -511,6 +511,7 @@
GATEWAY_ID VARCHAR(255) NOT NULL,
STORAGE_RESOURCE_ID VARCHAR(255) NOT NULL,
LOGIN_USERNAME VARCHAR(255),
+ USER_STORAGE_QUOTA BIGINT DEFAULT 0,
FS_ROOT_LOCATION VARCHAR(255),
RESOURCE_CS_TOKEN VARCHAR(255),
PRIMARY KEY(GATEWAY_ID,STORAGE_RESOURCE_ID),
diff --git a/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql b/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
index 9ee940b..2ac71f6 100644
--- a/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
+++ b/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
@@ -504,6 +504,7 @@
GATEWAY_ID VARCHAR(255) NOT NULL,
STORAGE_RESOURCE_ID VARCHAR(255) NOT NULL,
LOGIN_USERNAME VARCHAR(255),
+ USER_STORAGE_QUOTA BIGINT DEFAULT 0,
FS_ROOT_LOCATION VARCHAR(255),
RESOURCE_CS_TOKEN VARCHAR(255),
PRIMARY KEY(GATEWAY_ID,STORAGE_RESOURCE_ID),
diff --git a/modules/registry/release-migration-scripts/next/DeltaScripts/appCatalog_schema_delta.sql b/modules/registry/release-migration-scripts/next/DeltaScripts/appCatalog_schema_delta.sql
index 8092f44..d0dbb6d 100644
--- a/modules/registry/release-migration-scripts/next/DeltaScripts/appCatalog_schema_delta.sql
+++ b/modules/registry/release-migration-scripts/next/DeltaScripts/appCatalog_schema_delta.sql
@@ -24,3 +24,6 @@
alter table GROUP_COMPUTE_RESOURCE_PREFERENCE drop column IF EXISTS RESERVATION;
alter table GROUP_COMPUTE_RESOURCE_PREFERENCE drop column IF EXISTS RESERVATION_START_TIME;
alter table GROUP_COMPUTE_RESOURCE_PREFERENCE drop column IF EXISTS RESERVATION_END_TIME;
+
+-- AIRAVATA-3343: Add UserStorageQuota entry to StoragePreferences table
+alter table STORAGE_PREFERENCE add column IF NOT EXISTS USER_STORAGE_QUOTA BIGINT(20);
\ No newline at end of file
diff --git a/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift b/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift
index b5ad3ac..b60a786 100644
--- a/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift
+++ b/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift
@@ -85,7 +85,8 @@
1: required string storageResourceId,
2: optional string loginUserName,
3: optional string fileSystemRootLocation,
- 4: optional string resourceSpecificCredentialStoreToken
+ 4: optional string resourceSpecificCredentialStoreToken,
+ 5: optional i64 userStorageQuota
}
/**