Skip to content

Commit

Permalink
fix(store): retention policy regex (#2532)
Browse files Browse the repository at this point in the history
  • Loading branch information
richard-ramos committed Mar 15, 2024
1 parent 0894f0c commit 23a291b
Showing 1 changed file with 22 additions and 22 deletions.
44 changes: 22 additions & 22 deletions waku/waku_archive/retention_policy/builder.nim
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@ import
proc new*(T: type RetentionPolicy,
retPolicy: string):
RetentionPolicyResult[Option[RetentionPolicy]] =
let retPolicy = retPolicy.toLower

# Validate the retention policy format
if retPolicy == "" or retPolicy == "none":
return ok(none(RetentionPolicy))

const StoreMessageRetentionPolicyRegex = re"^\w+:\w+$"
const StoreMessageRetentionPolicyRegex = re"^\w+:\d*\.?\d+((g|m)b)?$"
if not retPolicy.match(StoreMessageRetentionPolicyRegex):
return err("invalid 'store message retention policy' format: " & retPolicy)

Expand Down Expand Up @@ -55,33 +56,32 @@ proc new*(T: type RetentionPolicy,
elif policy == "size":
var retentionSize: string
retentionSize = policyArgs

# captures the size unit such as GB or MB
let sizeUnit = retentionSize.substr(retentionSize.len-2)
# captures the string type number data of the size provided
# captures the string type number data of the size provided
let sizeQuantityStr = retentionSize.substr(0,retentionSize.len-3)
# to hold the numeric value data of size
var inptSizeQuantity: float
var sizeQuantity: int64

if sizeUnit in ["gb", "Gb", "GB", "gB"]:
# parse the actual value into integer type var
try:
inptSizeQuantity = parseFloat(sizeQuantityStr)
except ValueError:
return err("invalid size retention policy argument: " & getCurrentExceptionMsg())
# GB data is converted into bytes for uniform processing
sizeQuantity = int64(inptSizeQuantity * 1024.0 * 1024.0 * 1024.0)
elif sizeUnit in ["mb", "Mb", "MB", "mB"]:
try:
inptSizeQuantity = parseFloat(sizeQuantityStr)
# MB data is converted into bytes for uniform processing
sizeQuantity = int64(inptSizeQuantity * 1024.0 * 1024.0)
except ValueError:
return err("invalid size retention policy argument")
else:
return err ("""invalid size retention value unit: expected "Mb" or "Gb" but got """ & sizeUnit )

var sizeMultiplier: float

try:
inptSizeQuantity = parseFloat(sizeQuantityStr)
except ValueError:
return err("invalid size retention policy argument: " & getCurrentExceptionMsg())

case sizeUnit:
of "gb":
sizeMultiplier = 1024.0 * 1024.0 * 1024.0
of "mb":
sizeMultiplier = 1024.0 * 1024.0
else:
return err ("""invalid size retention value unit: expected "Mb" or "Gb" but got """ & sizeUnit )

# quantity is converted into bytes for uniform processing
sizeQuantity = int64(inptSizeQuantity * sizeMultiplier)

if sizeQuantity <= 0:
return err("invalid size retention policy argument: a non-zero value is required")

Expand Down

0 comments on commit 23a291b

Please sign in to comment.