Seems fine to me, I don't know this code well though. Acked-by: Ethan Jackson <et...@nicira.com>
On Fri, Mar 1, 2013 at 11:16 AM, Ben Pfaff <b...@nicira.com> wrote: > Until now, the OVSDB data journaling implementation has made write errors > "sticky", so that a single write error persists as long as ovsdb-server is > alive. However, some kinds of write errors (such as ENOSPC) can be > transient in practice. I don't know of a good reason to make such errors > sticky, so this commit makes the journaling code retry writes even after > an error occurs, allowing ovsdb-server to recover from transient errors. > > Reported-by: likunyun <kunyu...@hotmail.com> > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > ovsdb/log.c | 14 ++++++-------- > 1 files changed, 6 insertions(+), 8 deletions(-) > > diff --git a/ovsdb/log.c b/ovsdb/log.c > index 440e8d0..ea3c3f3 100644 > --- a/ovsdb/log.c > +++ b/ovsdb/log.c > @@ -1,4 +1,4 @@ > -/* Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. > +/* Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -48,7 +48,7 @@ struct ovsdb_log { > struct lockfile *lockfile; > FILE *stream; > struct ovsdb_error *read_error; > - struct ovsdb_error *write_error; > + bool write_error; > enum ovsdb_log_mode mode; > }; > > @@ -133,7 +133,7 @@ ovsdb_log_open(const char *name, enum > ovsdb_log_open_mode open_mode, > file->prev_offset = 0; > file->offset = 0; > file->read_error = NULL; > - file->write_error = NULL; > + file->write_error = false; > file->mode = OVSDB_LOG_READ; > *filep = file; > return NULL; > @@ -154,7 +154,6 @@ ovsdb_log_close(struct ovsdb_log *file) > fclose(file->stream); > lockfile_unlock(file->lockfile); > ovsdb_error_destroy(file->read_error); > - ovsdb_error_destroy(file->write_error); > free(file); > } > } > @@ -332,10 +331,9 @@ ovsdb_log_write(struct ovsdb_log *file, struct json > *json) > > json_string = NULL; > > - if (file->write_error) { > - return ovsdb_error_clone(file->write_error); > - } else if (file->mode == OVSDB_LOG_READ) { > + if (file->mode == OVSDB_LOG_READ || file->write_error) { > file->mode = OVSDB_LOG_WRITE; > + file->write_error = false; > if (fseeko(file->stream, file->offset, SEEK_SET)) { > error = ovsdb_io_error(errno, "%s: cannot seek to offset > %lld", > file->name, (long long int) > file->offset); > @@ -383,7 +381,7 @@ ovsdb_log_write(struct ovsdb_log *file, struct json > *json) > return NULL; > > error: > - file->write_error = ovsdb_error_clone(error); > + file->write_error = true; > free(json_string); > return error; > } > -- > 1.7.2.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev >
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev