|
@ -161,31 +161,24 @@ func (store *AbstractSqlStore) InsertEntry(ctx context.Context, entry *filer.Ent |
|
|
if len(entry.GetChunks()) > filer.CountEntryChunksForGzip { |
|
|
if len(entry.GetChunks()) > filer.CountEntryChunksForGzip { |
|
|
meta = util.MaybeGzipData(meta) |
|
|
meta = util.MaybeGzipData(meta) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
sqlInsert := "insert" |
|
|
res, err := db.ExecContext(ctx, store.GetSqlInsert(bucket), util.HashStringToLong(dir), name, dir, meta) |
|
|
res, err := db.ExecContext(ctx, store.GetSqlInsert(bucket), util.HashStringToLong(dir), name, dir, meta) |
|
|
if err == nil { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if !strings.Contains(strings.ToLower(err.Error()), "duplicate") { |
|
|
|
|
|
// return fmt.Errorf("insert: %s", err)
|
|
|
|
|
|
// skip this since the error can be in a different language
|
|
|
|
|
|
|
|
|
if err != nil && strings.Contains(strings.ToLower(err.Error()), "duplicate entry") { |
|
|
|
|
|
// now the insert failed possibly due to duplication constraints
|
|
|
|
|
|
sqlInsert = "falls back to update" |
|
|
|
|
|
glog.V(1).Infof("insert %s %s: %v", entry.FullPath, sqlInsert, err) |
|
|
|
|
|
res, err = db.ExecContext(ctx, store.GetSqlUpdate(bucket), meta, util.HashStringToLong(dir), name, dir) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// now the insert failed possibly due to duplication constraints
|
|
|
|
|
|
glog.V(1).Infof("insert %s falls back to update: %v", entry.FullPath, err) |
|
|
|
|
|
|
|
|
|
|
|
res, err = db.ExecContext(ctx, store.GetSqlUpdate(bucket), meta, util.HashStringToLong(dir), name, dir) |
|
|
|
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return fmt.Errorf("upsert %s: %s", entry.FullPath, err) |
|
|
|
|
|
|
|
|
return fmt.Errorf("%s %s: %s", sqlInsert, entry.FullPath, err) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
_, err = res.RowsAffected() |
|
|
_, err = res.RowsAffected() |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return fmt.Errorf("upsert %s but no rows affected: %s", entry.FullPath, err) |
|
|
|
|
|
|
|
|
return fmt.Errorf("%s %s but no rows affected: %s", sqlInsert, entry.FullPath, err) |
|
|
} |
|
|
} |
|
|
return nil |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return nil |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (store *AbstractSqlStore) UpdateEntry(ctx context.Context, entry *filer.Entry) (err error) { |
|
|
func (store *AbstractSqlStore) UpdateEntry(ctx context.Context, entry *filer.Entry) (err error) { |
|
|