Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/go_modules/github.com/google/go-c…
Browse files Browse the repository at this point in the history
…mp-0.6.0
  • Loading branch information
krishnamiriyala authored Oct 16, 2023
2 parents 37536fd + 7914aef commit f13e61b
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 22 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ require (
github.com/lib/pq v1.10.9
github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.8.4
google.golang.org/grpc v1.58.2
google.golang.org/grpc v1.58.3
google.golang.org/protobuf v1.31.0
gorm.io/driver/postgres v1.5.2
gorm.io/gorm v1.25.4
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ=
google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
Expand Down
48 changes: 31 additions & 17 deletions pkg/realization_store/realization_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,12 +171,13 @@ type IRealizationStore interface {
MarkEnforcementAsSuccess(ctx context.Context, enforcementPoint string, resources ...*ProtobufWithMetadata) error
MarkEnforcementAsError(ctx context.Context, enforcementPoint string, errStr string, resources ...*ProtobufWithMetadata) error

SoftDelete(ctx context.Context, resource *ProtobufWithMetadata) (rowsAffected int64, err error)
SoftDelete(ctx context.Context, resource *ProtobufWithMetadata) (rowsAffected int64, metadata protostore.Metadata, err error)
Delete(ctx context.Context, resource *ProtobufWithMetadata) (rowsAffected int64, err error)
Purge(ctx context.Context, resource *ProtobufWithMetadata) (rowsAffected int64, err error)
MarkEnforcementAsDeletionPending(ctx context.Context, enforcementPoint string, resources ...*ProtobufWithMetadata) error
MarkEnforcementAsDeletionInProgress(ctx context.Context, enforcementPoint string, resources ...*ProtobufWithMetadata) error
MarkEnforcementAsDeletionRealized(ctx context.Context, enforcementPoint string, resources ...*ProtobufWithMetadata) error
MarkEnforcementAsDeletionError(ctx context.Context, enforcementPoint string, errStr string, resources ...*ProtobufWithMetadata) error

GetOverallStatus(ctx context.Context, resource *ProtobufWithMetadata) (Status, error)
GetOverallStatusWithEnforcementDetails(ctx context.Context, resource *ProtobufWithMetadata) (Status, map[string]Status, error)
Expand Down Expand Up @@ -391,7 +392,17 @@ Operation fails if any resource's revision is out-of-date.
func (r *realizationStoreV0) MarkEnforcementAsError(ctx context.Context, enforcementPoint string, errStr string, resources ...*ProtobufWithMetadata) error {
for i := range resources {
resource := resources[i]
if err := r.markEnforcementAsError(ctx, enforcementPoint, errStr, resource); err != nil {
if err := r.markEnforcementAsError(ctx, enforcementPoint, errStr, false, resource); err != nil {
return err
}
}
return nil
}

func (r *realizationStoreV0) MarkEnforcementAsDeletionError(ctx context.Context, enforcementPoint string, errStr string, resources ...*ProtobufWithMetadata) error {
for i := range resources {
resource := resources[i]
if err := r.markEnforcementAsError(ctx, enforcementPoint, errStr, true, resource); err != nil {
return err
}
}
Expand All @@ -406,7 +417,7 @@ Operation fails if resource's revision is out-of-date.
TODO consider prepending to additional_details column and capping its length using a SQL statement rather than through Golang.
*/
func (r *realizationStoreV0) markEnforcementAsError(ctx context.Context, enforcementPoint string, errStr string, resource *ProtobufWithMetadata) error {
func (r *realizationStoreV0) markEnforcementAsError(ctx context.Context, enforcementPoint string, errStr string, softDeleted bool, resource *ProtobufWithMetadata) error {
orgId, err := r.dataStore.GetAuthorizer().GetOrgFromContext(ctx)
if err != nil {
return err
Expand All @@ -417,16 +428,18 @@ func (r *realizationStoreV0) markEnforcementAsError(ctx context.Context, enforce
logger.Debugln(MARKING, ENFORCEMENT, status.String(), STARTED)

if !r.doesResourceExist(ctx, resource) {
err = ErrRecordNotFound.WithValue("Revision", strconv.FormatInt(resource.Revision, 10))
err = ErrMarkingEnforcementFailed.WithValue("status", status.String()).Wrap(err)
logger.Errorln(MARKING, ENFORCEMENT, status.String(), FAILED, err)
return err
if !softDeleted {
err = ErrRecordNotFound.WithValue("Revision", strconv.FormatInt(resource.Revision, 10))
err = ErrMarkingEnforcementFailed.WithValue("status", status.String()).Wrap(err)
logger.Errorln(MARKING, ENFORCEMENT, status.String(), FAILED, err)
return err
}
}

// Change enforcement status to error
enforcementStatusRecord := GetModelEnforcementStatusRecord(resource, orgId)
enforcementStatusRecord.EnforcementPointId = enforcementPoint
_ = r.dataStore.Find(ctx, enforcementStatusRecord)
_ = r.dataStore.Helper().FindInTable(ctx, datastore.GetTableName(enforcementStatusRecord), enforcementStatusRecord, softDeleted)
additionalDetails := fmt.Sprintf("ERROR %s at revision %d; %s", errStr, resource.Revision, enforcementStatusRecord.AdditionalDetails)
if len(additionalDetails) > ADDITIONAL_DETAILS_LENGTH_CAP {
additionalDetails = additionalDetails[:ADDITIONAL_DETAILS_LENGTH_CAP]
Expand All @@ -439,7 +452,7 @@ func (r *realizationStoreV0) markEnforcementAsError(ctx context.Context, enforce

// Change overall status to error
overallStatusRecord := GetModelOverallStatusRecord(resource, orgId)
_ = r.dataStore.Find(ctx, overallStatusRecord)
_ = r.dataStore.Helper().FindInTable(ctx, datastore.GetTableName(overallStatusRecord), overallStatusRecord, softDeleted)
additionalDetails = fmt.Sprintf("ERROR %s at revision %d; %s", errStr, resource.Revision, overallStatusRecord.AdditionalDetails)
if len(additionalDetails) > ADDITIONAL_DETAILS_LENGTH_CAP {
additionalDetails = additionalDetails[:ADDITIONAL_DETAILS_LENGTH_CAP]
Expand All @@ -457,36 +470,37 @@ func (r *realizationStoreV0) markEnforcementAsError(ctx context.Context, enforce
/*
Soft Deletes a resource from the DB. Sets overall status and enforcement status to DELETION_PENDING.
*/
func (r *realizationStoreV0) SoftDelete(ctx context.Context, resource *ProtobufWithMetadata) (rowsAffected int64, err error) {
func (r *realizationStoreV0) SoftDelete(ctx context.Context, resource *ProtobufWithMetadata) (rowsAffected int64, metadata protostore.Metadata, err error) {
orgId, err := r.dataStore.GetAuthorizer().GetOrgFromContext(ctx)
if err != nil {
return 0, err
return 0, protostore.Metadata{}, err
}

logger := r.logger.WithFields(logrus.Fields{ORG_ID: orgId, RESOURCE_ID: resource.Id})

logger.Debugln(SOFT_DELETING, RESOURCE, STARTED)
if rowsAffected, _, err = r.protoStore.SoftDeleteById(ctx, resource.Id, resource.Message); err != nil {
if rowsAffected, metadata, err = r.protoStore.SoftDeleteById(ctx, resource.Id, resource.Message); err != nil {
logger.Errorln(SOFT_DELETING, RESOURCE, FAILED, err)
return 0, err
return 0, protostore.Metadata{}, err
} else if rowsAffected == 0 {
err = ErrRecordNotFound.WithValue("Revision", strconv.FormatInt(resource.Revision, 10))
logger.Warnln(err)
}
resource.Metadata.Revision = metadata.Revision

if err = r.resetAllEnforcementStatus(ctx, resource, DELETION_PENDING); err != nil {
logger.Errorln(SOFT_DELETING, RESOURCE, FAILED, err)
return 0, err
return 0, protostore.Metadata{}, err
}

// In single transaction this computation can be skipped here and we can setOverallStatus.
if err = r.computeOverallStatus(ctx, resource, DELETION_PENDING); err != nil {
logger.Errorln(SOFT_DELETING, RESOURCE, FAILED, err)
return rowsAffected, err
return 0, protostore.Metadata{}, err
}

logger.Infoln(SOFT_DELETING, RESOURCE, FINISHED)
return rowsAffected, nil
return rowsAffected, metadata, nil
}

/*
Expand Down Expand Up @@ -882,7 +896,7 @@ func (r *realizationStoreV0) GetEnforcementStatusMap(ctx context.Context, resour
filter := GetModelEnforcementStatusRecordWithoutRevision(resource, orgId)
enforcementStatuses := make([]EnforcementStatus, 0)
err = r.dataStore.Helper().FindWithFilterInTable(
ctx, GetEnforcementStatusTableName(resource.Message), filter, &enforcementStatuses, datastore.NoPagination(), true)
ctx, GetEnforcementStatusTableName(resource.Message), filter, &enforcementStatuses, datastore.NoPagination(), false)
if err != nil {
err = ErrGettingRealizationStatus.Wrap(err)
logger.Errorln(FETCHING, ENFORCEMENT_STATUS, FAILED, err)
Expand Down
20 changes: 18 additions & 2 deletions pkg/realization_store/realization_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -679,8 +679,16 @@ func TestRealizationWorkflow(t *testing.T) {
{expected: REALIZED, actual: enforcementStatusMap["e2"]},
})

_, err = RS.SoftDelete(ctx, cpu)
err = RS.FindById(ctx, cpu.Id, cpu)
assert.NoError(err)
metadataBeforeSoftDelete := cpu.Metadata
previousRevision := cpu.Revision
rowAffected, metadata, err := RS.SoftDelete(ctx, cpu)
assert.NoError(err)
assert.Equal(metadataBeforeSoftDelete.Revision+1, metadata.Revision)
assert.Equal(previousRevision+1, metadata.Revision)
assert.Equal(metadata.Revision, cpu.Metadata.Revision)
assert.Equal(int64(1), rowAffected)
overallStatus, enforcementStatusMap, err = RS.GetOverallStatusWithEnforcementDetails(ctx, cpu)
assert.NoError(err)
checkStatuses(t, []StatusPair{
Expand Down Expand Up @@ -798,8 +806,16 @@ func TestPurgeStaleRecords(t *testing.T) {
{expected: IN_PROGRESS, actual: enforcementStatusMap["e2"]},
})

_, err = RS.SoftDelete(ctx, cpu)
err = RS.FindById(ctx, cpu.Id, cpu)
assert.NoError(err)
metadataBeforeSoftDelete := cpu.Metadata
previousRevision := cpu.Revision
rowAffected, metadata, err := RS.SoftDelete(ctx, cpu)
assert.NoError(err)
assert.Equal(metadataBeforeSoftDelete.Revision+1, metadata.Revision)
assert.Equal(previousRevision+1, metadata.Revision)
assert.Equal(metadata.Revision, cpu.Metadata.Revision)
assert.Equal(int64(1), rowAffected)
overallStatus, enforcementStatusMap, err = RS.GetOverallStatusWithEnforcementDetails(ctx, cpu)
assert.NoError(err)
checkStatuses(t, []StatusPair{
Expand Down

0 comments on commit f13e61b

Please sign in to comment.