rhmessaging commits: r2465 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 15:33:21 -0400 (Fri, 12 Sep 2008)
New Revision: 2465
Modified:
mgmt/trunk/cumin/python/cumin/submitter.py
mgmt/trunk/cumin/python/cumin/submitter.strings
Log:
Adding Job tab to Submitter view
Modified: mgmt/trunk/cumin/python/cumin/submitter.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/submitter.py 2008-09-12 19:32:44 UTC (rev 2464)
+++ mgmt/trunk/cumin/python/cumin/submitter.py 2008-09-12 19:33:21 UTC (rev 2465)
@@ -11,6 +11,7 @@
from parameters import *
from formats import *
from util import *
+from job import *
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.submitter")
@@ -48,6 +49,25 @@
self.add_mode(view)
self.set_view_mode(view)
+ def show_scheduler(self, session, scheduler):
+ return self.frame.show_scheduler(session, scheduler)
+
+ def show_job(self, session, job):
+ return self.frame.show_job(session, job)
+
+ def show_job_group(self, session, job_group):
+ return self.frame.show_job_group(session, job_group)
+
+ def show_jobs_hold(self, session):
+ return self.frame.show_jobs_hold(session)
+
+ def show_jobs_release(self, session):
+ return self.frame.show_jobs_release(session)
+
+ def show_jobs_remove(self, session):
+ return self.frame.show_jobs_remove(session)
+
+
class SubmitterView(CuminView):
def __init__(self, app, name):
super(SubmitterView, self).__init__(app, name)
@@ -61,6 +81,9 @@
stats = SubmitterStats(app, "stats")
self.__tabs.add_tab(stats)
+ jobs = SubmitterJobSet(app, "jobs")
+ self.__tabs.add_tab(jobs)
+
details = CuminDetails(app, "details")
self.__tabs.add_tab(details)
@@ -93,3 +116,36 @@
def render_title(self, session, sched):
return "Jobs"
+
+class SubmitterJobSet(JobSet, Form):
+ def __init__(self, app, name):
+ super(SubmitterJobSet, self).__init__(app, name)
+
+ self.set_default_column_name("global_job_id")
+
+ self.__remove = JobRemoveButton(app, "remove", self)
+ self.add_child(self.__remove)
+
+ self.__hold = JobHoldButton(app, "hold", self)
+ self.add_child(self.__hold)
+
+ self.__release = JobReleaseButton(app, "release", self)
+ self.add_child(self.__release)
+
+ def pre_render(self, session, args):
+ self.show_column(session, "global_job_id")
+ self.show_column(session, "custom_id")
+ self.show_column(session, "cmd")
+ self.show_column(session, "scheduler")
+ self.show_column(session, "custom_group")
+ self.show_column(session, "job_status")
+
+ def render_sql_where(self, session, submitter):
+ phase_sql = self.get_phase_sql(session)
+ submitter_sql = "owner = '%s'" % submitter.Name
+ return "where %s" % " and ".join([phase_sql, submitter_sql])
+
+ def render_title(self, session, submitter):
+ submitter_sql = "owner = '%s'" % submitter.Name
+ return "Jobs %s" % fmt_count(Job.select(submitter_sql).count())
+
Modified: mgmt/trunk/cumin/python/cumin/submitter.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/submitter.strings 2008-09-12 19:32:44 UTC (rev 2464)
+++ mgmt/trunk/cumin/python/cumin/submitter.strings 2008-09-12 19:33:21 UTC (rev 2465)
@@ -38,3 +38,28 @@
</tr>
</tbody>
</table>
+
+[SubmitterJobSet.html]
+ <div class="rfloat">{phase}</div>
+<form id="{id}" style="clear:right;" method="post" action="?">
+
+ <div class="sactions">
+ <h2>Act on Selected Jobs:</h2>
+ {hold} {release} {remove}
+ </div>
+
+ <table class="mobjects">
+ <thead>
+ <tr>
+ <th class="setnav" colspan="{column_count}">
+ <div class="rfloat">{page}</div>
+ {count}
+ </th>
+ </tr>
+ <tr>{headers}</tr>
+ </thead>
+ <tbody>{items}</tbody>
+ </table>
+ <div>{hidden_inputs}</div>
+</form>
+
17 years, 7 months
rhmessaging commits: r2464 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 15:32:44 -0400 (Fri, 12 Sep 2008)
New Revision: 2464
Modified:
mgmt/trunk/cumin/python/cumin/job.py
mgmt/trunk/cumin/python/cumin/job.strings
Log:
Adding Submitter column (without link to submitter for now)
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-09-12 19:03:21 UTC (rev 2463)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-09-12 19:32:44 UTC (rev 2464)
@@ -36,12 +36,12 @@
col = self.AccountingGroupColumn(app, "agroup")
self.add_hidden_column(col)
- #col = self.SubmitterColumn(app, "submitter")
- #self.add_hidden_column(col)
-
col = self.SchedulerColumn(app, "scheduler")
self.add_hidden_column(col)
+ col = self.SubmitterColumn(app, "submitter")
+ self.add_hidden_column(col)
+
col = self.ClusterIdColumn(app, "cluster_id")
col.alignment = "right"
self.add_hidden_column(col)
@@ -132,16 +132,10 @@
def render_title(self, session, data):
return "Accounting Group"
-# class SubmitterColumn(SqlTableColumn):
-# def render_title(self, session, data):
-# return "Submitter"
-#
-# def render_content(self, session, data):
-# job = Identifiable(data["id"])
-# branch = session.branch()
-# self.frame.show_job(branch, job).show_view(branch)
-# return fmt_olink(branch, job, name=data["submitter"])
-
+ class SubmitterColumn(SqlTableColumn):
+ def render_title(self, session, data):
+ return "Submitter"
+
class SchedulerColumn(SqlTableColumn):
def render_title(self, session, data):
return "Scheduler"
@@ -758,9 +752,9 @@
self.show_column(session, "global_job_id")
self.show_column(session, "custom_id")
self.show_column(session, "cmd")
- #self.show_column(session, "submitter")
self.show_column(session, "custom_group")
self.show_column(session, "scheduler")
+ self.show_column(session, "submitter")
self.show_column(session, "job_status")
def render_sql_where(self, session, *args):
Modified: mgmt/trunk/cumin/python/cumin/job.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.strings 2008-09-12 19:03:21 UTC (rev 2463)
+++ mgmt/trunk/cumin/python/cumin/job.strings 2008-09-12 19:32:44 UTC (rev 2464)
@@ -10,7 +10,7 @@
j.custom_priority,
j.job_status,
j.global_job_id,
-/* j.owner as submitter, */
+ j.owner as submitter,
j.title,
s.name as scheduler,
j.scheduler_id,
17 years, 7 months
rhmessaging commits: r2463 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 15:03:21 -0400 (Fri, 12 Sep 2008)
New Revision: 2463
Modified:
mgmt/trunk/cumin/python/cumin/scheduler.py
mgmt/trunk/cumin/python/cumin/scheduler.strings
Log:
Added Job tab to scheduler view
Modified: mgmt/trunk/cumin/python/cumin/scheduler.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/scheduler.py 2008-09-12 19:02:29 UTC (rev 2462)
+++ mgmt/trunk/cumin/python/cumin/scheduler.py 2008-09-12 19:03:21 UTC (rev 2463)
@@ -11,6 +11,7 @@
from parameters import *
from formats import *
from util import *
+from job import *
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.scheduler")
@@ -47,7 +48,23 @@
view = SchedulerView(app, "view")
self.add_mode(view)
self.set_view_mode(view)
+
+ def show_job(self, session, job):
+ return self.frame.show_job(session, job)
+
+ def show_job_group(self, session, job_group):
+ return self.frame.show_job_group(session, job_group)
+ def show_jobs_hold(self, session):
+ return self.frame.show_jobs_hold(session)
+
+ def show_jobs_release(self, session):
+ return self.frame.show_jobs_release(session)
+
+ def show_jobs_remove(self, session):
+ return self.frame.show_jobs_remove(session)
+
+
class SchedulerView(CuminView):
def __init__(self, app, name):
super(SchedulerView, self).__init__(app, name)
@@ -61,6 +78,9 @@
stats = SchedulerStats(app, "stats")
self.__tabs.add_tab(stats)
+ jobs = SchedulerJobSet(app, "jobs")
+ self.__tabs.add_tab(jobs)
+
details = CuminDetails(app, "details")
self.__tabs.add_tab(details)
@@ -105,3 +125,36 @@
def render_title(self, session, sched):
return "Jobs"
+
+class SchedulerJobSet(JobSet, Form):
+ def __init__(self, app, name):
+ super(SchedulerJobSet, self).__init__(app, name)
+
+ self.set_default_column_name("global_job_id")
+
+ self.__remove = JobRemoveButton(app, "remove", self)
+ self.add_child(self.__remove)
+
+ self.__hold = JobHoldButton(app, "hold", self)
+ self.add_child(self.__hold)
+
+ self.__release = JobReleaseButton(app, "release", self)
+ self.add_child(self.__release)
+
+ def pre_render(self, session, args):
+ self.show_column(session, "global_job_id")
+ self.show_column(session, "custom_id")
+ self.show_column(session, "cmd")
+ #self.show_column(session, "submitter")
+ self.show_column(session, "custom_group")
+ self.show_column(session, "job_status")
+
+ def render_sql_where(self, session, scheduler):
+ phase_sql = self.get_phase_sql(session)
+ scheduler_sql = "scheduler_id = '%i'" % scheduler.id
+ return "where %s" % " and ".join([phase_sql, scheduler_sql])
+
+ def render_title(self, session, scheduler):
+ where_scheduler = "scheduler_id = %i" % scheduler.id
+ return "Jobs %s" % fmt_count(Job.select(where_scheduler).count())
+
Modified: mgmt/trunk/cumin/python/cumin/scheduler.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/scheduler.strings 2008-09-12 19:02:29 UTC (rev 2462)
+++ mgmt/trunk/cumin/python/cumin/scheduler.strings 2008-09-12 19:03:21 UTC (rev 2463)
@@ -39,3 +39,28 @@
</tr>
</tbody>
</table>
+
+[SchedulerJobSet.html]
+ <div class="rfloat">{phase}</div>
+<form id="{id}" style="clear:right;" method="post" action="?">
+
+ <div class="sactions">
+ <h2>Act on Selected Jobs:</h2>
+ {hold} {release} {remove}
+ </div>
+
+ <table class="mobjects">
+ <thead>
+ <tr>
+ <th class="setnav" colspan="{column_count}">
+ <div class="rfloat">{page}</div>
+ {count}
+ </th>
+ </tr>
+ <tr>{headers}</tr>
+ </thead>
+ <tbody>{items}</tbody>
+ </table>
+ <div>{hidden_inputs}</div>
+</form>
+
17 years, 7 months
rhmessaging commits: r2462 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 15:02:29 -0400 (Fri, 12 Sep 2008)
New Revision: 2462
Modified:
mgmt/trunk/cumin/python/cumin/job.py
Log:
Removed unused references to scheduler and submitter frames
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-09-12 15:55:39 UTC (rev 2461)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-09-12 19:02:29 UTC (rev 2462)
@@ -11,8 +11,6 @@
from parameters import *
from formats import *
from util import *
-from scheduler import *
-#from submitter import *
from system import *
strings = StringCatalog(__file__)
@@ -333,12 +331,6 @@
self.__edit_ads = JobAdsEditor(app, "editads")
self.add_mode(self.__edit_ads)
- self.__scheduler = SchedulerFrame(app, "scheduler")
- self.add_mode(self.__scheduler)
-
- #self.__submitter = SubmitterFrame(app, "submitter")
- #self.add_mode(self.__submitter)
-
self.__system = SystemFrame(app, "system")
self.add_mode(self.__system)
@@ -346,16 +338,6 @@
self.page.set_current_frame(session, self.__edit_ads)
return self.show_mode(session, self.__edit_ads)
- def show_scheduler(self, session, scheduler):
- self.__scheduler.set_object(session, scheduler)
- self.page.set_current_frame(session, self.__scheduler)
- return self.show_mode(session, self.__scheduler)
-
- def show_submitter(self, session, submitter):
- self.__submitter.set_object(session, submitter)
- self.page.set_current_frame(session, self.__submitter)
- return self.show_mode(session, self.__submitter)
-
def show_job_group(self, session, jobgroup):
self.__job.set_object(session, jobgroup)
self.page.set_current_frame(session, self.__job)
17 years, 7 months
rhmessaging commits: r2461 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 11:55:39 -0400 (Fri, 12 Sep 2008)
New Revision: 2461
Modified:
mgmt/trunk/cumin/python/cumin/job.py
Log:
Renamed "Deleted" to "Removed" for the job status radio buttons.
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-09-12 15:54:34 UTC (rev 2460)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-09-12 15:55:39 UTC (rev 2461)
@@ -1007,7 +1007,7 @@
self.add_state("a", "All")
self.add_state("r", "Running")
self.add_state("h", "Held")
- self.add_state("d", "Deleted")
+ self.add_state("d", "Removed")
def get_sql_constraint(self, session):
phase = self.get(session)
17 years, 7 months
rhmessaging commits: r2460 - mgmt/trunk/cumin/resources.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 11:54:34 -0400 (Fri, 12 Sep 2008)
New Revision: 2460
Modified:
mgmt/trunk/cumin/resources/documentation.css
mgmt/trunk/cumin/resources/help.html
Log:
Adding help for Hold/Release/Remove for jobs and job groups.
Modified: mgmt/trunk/cumin/resources/documentation.css
===================================================================
--- mgmt/trunk/cumin/resources/documentation.css 2008-09-12 14:47:22 UTC (rev 2459)
+++ mgmt/trunk/cumin/resources/documentation.css 2008-09-12 15:54:34 UTC (rev 2460)
@@ -226,3 +226,32 @@
font-size: 0.9em;
}
+ul.radiotabs {
+ list-style-image:none;
+ list-style-position:outside;
+ list-style-type:none;
+ display:inline;
+ padding-left: 0.25em;
+}
+
+ul.radiotabs li {
+ display:inline;
+ padding:0pt 0.25em 0pt 0pt;
+}
+
+ul.radiotabs a {
+ text-decoration: none;
+}
+ul.radiotabs li a:before {
+ content: url(resource?name=radio-button.png);
+ margin: 0 0.5em 0 0;
+ vertical-align: -15%;
+}
+
+ul.radiotabs li a.selected {
+ color: black;
+}
+ul.radiotabs li a.selected:before {
+ content: url(resource?name=radio-button-checked.png);
+}
+
\ No newline at end of file
Modified: mgmt/trunk/cumin/resources/help.html
===================================================================
--- mgmt/trunk/cumin/resources/help.html 2008-09-12 14:47:22 UTC (rev 2459)
+++ mgmt/trunk/cumin/resources/help.html 2008-09-12 15:54:34 UTC (rev 2460)
@@ -230,7 +230,38 @@
</li>
</ul>
+ <div class="titlepage">
+ <a name="main.pool.jobgrouphold.help"/><a name="main.pool.jobgroupremove.help"/><a name="main.pool.jobgrouprelease.help"/>
+ <a name="main.pool.jobshold.help" /><a name="main.pool.jobsremove.help" /><a name="main.pool.jobsrelease.help" />
+ <h3 class="title">Job Group Actions</h3>
+ </div>
+ <p>
+ The following actions can be performed on a job:
+ <dl>
+ <dt>Hold</dt>
+ <dd>Prevent the job from running until it is manually released.</dd>
+
+ <dt>Release</dt>
+ <dd>Release a job from the Held state.</dd>
+
+ <dt>Remove</dt>
+ <dd>Mark the job as removed. Removed jobs will not run. Removed jobs are only viewable by selecting the
+ <ul class="radiotabs">
+ <li><a href="javascript:void(0)" class="selected" >Removed</a></li>
+ </ul> button on the jobs page.
+ </dd>
+ </dl>
+ When any of these actions are performed on a job group, the action is performed on all the jobs in the group.
+ </p>
+<ul class="docnav">
+ <li class="up">
+ <a accesskey="u" href="#top">
+ <strong>Help Index</strong>
+ </a>
+ </li>
+</ul>
+
</div><!-- section -->
<div style="height:1000px;"><!-- --></div>
17 years, 7 months
rhmessaging commits: r2459 - store/trunk/cpp/lib/jrnl.
by rhmessaging-commits@lists.jboss.org
Author: kpvdr
Date: 2008-09-12 10:47:22 -0400 (Fri, 12 Sep 2008)
New Revision: 2459
Modified:
store/trunk/cpp/lib/jrnl/fcntl.cpp
store/trunk/cpp/lib/jrnl/jcntl.cpp
store/trunk/cpp/lib/jrnl/rcvdat.hpp
store/trunk/cpp/lib/jrnl/rmgr.cpp
store/trunk/cpp/lib/jrnl/rmgr.hpp
store/trunk/cpp/lib/jrnl/wrfc.cpp
Log:
Backport of 1.0 fix for BZ460346 " jexception 0x0406 nlfh::add_rd_subm_cnt_dblks() threw JERR_NFLH_RDOFFSOVFL: Attempted increase read offset past write offset. (_rd_subm_cnt_dblks=0 incr=4 _wr_subm_cnt_dblks=0) (BdbMessageStore.cpp:840)" This was a case of non-tx recovery from a journal whose last record exactly coincided with eof and has no outstanding enqueued records (ie nothing to read). Fixed by adjusting initialization parameters for this case.
Modified: store/trunk/cpp/lib/jrnl/fcntl.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/fcntl.cpp 2008-09-12 14:46:21 UTC (rev 2458)
+++ store/trunk/cpp/lib/jrnl/fcntl.cpp 2008-09-12 14:47:22 UTC (rev 2459)
@@ -97,7 +97,7 @@
#endif
if (ro) // Recovery initialization: set counters only
{
- if (!ro->_empty)
+ if (!ro->_jempty)
{
// For last file only, set write counters to end of last record (the
// continuation point); for all others, set to eof.
@@ -141,7 +141,7 @@
{
if (ro)
{
- if (!ro->_empty)
+ if (!ro->_jempty)
{
if (ro->_lfid == _fid)
{
Modified: store/trunk/cpp/lib/jrnl/jcntl.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.cpp 2008-09-12 14:46:21 UTC (rev 2458)
+++ store/trunk/cpp/lib/jrnl/jcntl.cpp 2008-09-12 14:47:22 UTC (rev 2459)
@@ -187,7 +187,7 @@
rcvr_janalyze(_rcvdat, prep_txn_list_ptr);
highest_rid = _rcvdat._h_rid;
- if (_rcvdat._full)
+ if (_rcvdat._jfull)
throw jexception(jerrno::JERR_JCNTL_RECOVERJFULL, "jcntl", "recover");
this->log(LOG_DEBUG, _rcvdat.to_log(_jid));
@@ -207,7 +207,7 @@
_rrfc.initialize(_num_jfiles, _fc_arr, &_rcvdat);
_rmgr.initialize(rd_cb);
_wmgr.initialize(wr_cb, wcache_pgsize_sblks, wcache_num_pages, JRNL_WMGR_MAXDTOKPP,
- JRNL_WMGR_MAXWAITUS, _rcvdat._eo);
+ JRNL_WMGR_MAXWAITUS, (_rcvdat._lffull ? 0 : _rcvdat._eo));
_readonly_flag = true;
_init_flag = true;
@@ -322,7 +322,9 @@
if (res == RHM_IORES_RCINVALID)
{
get_wr_events(); // check for outstanding write events
- _rmgr.synchronize();
+ iores sres = _rmgr.synchronize();
+ if (sres != RHM_IORES_SUCCESS)
+ return sres;
if (cnt > 0)
::usleep(RCINVALID_SLEEP_TIME_MS * 1000);
}
@@ -608,7 +610,7 @@
rd._lfid = ji.get_end_file();
rd._owi = ji.get_initial_owi();
rd._frot = ji.get_frot();
- rd._empty = false;
+ rd._jempty = false;
}
catch (const jexception& e)
{
@@ -616,7 +618,7 @@
}
// Restore all read and write pointers and transactions
- if (!rd._empty)
+ if (!rd._jempty)
{
u_int16_t fid = rd._ffid;
std::ifstream ifs;
@@ -624,7 +626,7 @@
while (rcvr_get_next_record(fid, &ifs, lowi, rd)) ;
// Remove all txns from tmap that are not in the prepared list
- if (!rd._empty && prep_txn_list_ptr)
+ if (prep_txn_list_ptr)
{
std::vector<std::string> xid_list;
_tmap.xid_list(xid_list);
@@ -646,10 +648,12 @@
}
}
+ // Check for file full condition - add one to _jfsize_sblks to account for file header
+ rd._lffull = rd._eo == (1 + _jfsize_sblks) * JRNL_SBLK_SIZE * JRNL_DBLK_SIZE;
+
// Check for journal full condition
u_int16_t next_wr_fid = (rd._lfid + 1) % _num_jfiles;
- if (rd._ffid == next_wr_fid && rd._enq_cnt_list[next_wr_fid])
- rd._full = true;
+ rd._jfull = rd._ffid == next_wr_fid && rd._enq_cnt_list[next_wr_fid];
}
}
Modified: store/trunk/cpp/lib/jrnl/rcvdat.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rcvdat.hpp 2008-09-12 14:46:21 UTC (rev 2458)
+++ store/trunk/cpp/lib/jrnl/rcvdat.hpp 2008-09-12 14:47:22 UTC (rev 2459)
@@ -49,25 +49,27 @@
{
bool _owi; ///< Overwrite indicator
bool _frot; ///< First rotation flag
- bool _empty; ///< Journal data files empty
+ bool _jempty; ///< Journal data files empty
u_int16_t _ffid; ///< First file id
std::size_t _fro; ///< First record offset in ffid
u_int16_t _lfid; ///< Last file id
std::size_t _eo; ///< End offset (first byte past last record)
u_int64_t _h_rid; ///< Highest rid found
- bool _full; ///< Journal is full
+ bool _lffull; ///< Last file is full
+ bool _jfull; ///< Journal is full
std::vector<u_int32_t> _enq_cnt_list; ///< Number enqueued records found for each file
rcvdat():
_owi(false),
_frot(false),
- _empty(true),
+ _jempty(true),
_ffid(0),
_fro(0),
_lfid(0),
_eo(0),
_h_rid(0),
- _full(false),
+ _lffull(false),
+ _jfull(false),
_enq_cnt_list()
{}
@@ -75,13 +77,14 @@
{
_owi=false;
_frot = false;
- _empty=true;
+ _jempty=true;
_ffid=0;
_fro=0;
_lfid=0;
_eo=0;
_h_rid=0;
- _full = false;
+ _lffull = false;
+ _jfull = false;
_enq_cnt_list.clear();
_enq_cnt_list.resize(num_jfiles, 0);
}
@@ -92,7 +95,7 @@
oss << "Recover file analysis (jid=\"" << jid << "\"):" << std::endl;
oss << " Overwrite indicator (_owi) = " << (_owi ? "TRUE" : "FALSE") << std::endl;
oss << " First rotation (_frot) = " << (_frot ? "TRUE" : "FALSE") << std::endl;
- oss << " Journal empty (_empty) = " << (_empty ? "TRUE" : "FALSE") << std::endl;
+ oss << " Journal empty (_jempty) = " << (_jempty ? "TRUE" : "FALSE") << std::endl;
oss << " First fid (_ffid) = " << _ffid << std::endl;
oss << " First record offset in first fid (_fro) = 0x" << std::hex << _fro <<
std::dec << " (" << (_fro/JRNL_DBLK_SIZE) << " dblks)" << std::endl;
@@ -100,7 +103,8 @@
oss << " End offset (_eo) = 0x" << std::hex << _eo << std::dec << " (" <<
(_eo/JRNL_DBLK_SIZE) << " dblks)" << std::endl;
oss << " Highest rid (_h_rid) = 0x" << std::hex << _h_rid << std::dec << std::endl;
- oss << " Journal full (_full) = " << (_full ? "TRUE" : "FALSE") << std::endl;
+ oss << " Last file full (_lffull) = " << (_lffull ? "TRUE" : "FALSE") << std::endl;
+ oss << " Journal full (_jfull) = " << (_jfull ? "TRUE" : "FALSE") << std::endl;
oss << " Enqueued records (txn & non-txn):" << std::endl;
for (unsigned i=0; i<_enq_cnt_list.size(); i++)
oss << " File " << std::setw(2) << i << ": " << _enq_cnt_list[i] <<
@@ -112,9 +116,9 @@
{
std::ostringstream oss;
oss << "Recover file analysis (jid=\"" << jid << "\"):";
- oss << " owi=" << (_owi ? "TRUE" : "FALSE");
- oss << " frot=" << (_frot ? "TRUE" : "FALSE");
- oss << " empty=" << (_empty ? "TRUE" : "FALSE");
+ oss << " owi=" << (_owi ? "T" : "F");
+ oss << " frot=" << (_frot ? "T" : "F");
+ oss << " jempty=" << (_jempty ? "T" : "F");
oss << " ffid=" << _ffid;
oss << " fro=0x" << std::hex << _fro << std::dec << " (" <<
(_fro/JRNL_DBLK_SIZE) << " dblks)";
@@ -122,7 +126,8 @@
oss << " eo=0x" << std::hex << _eo << std::dec << " (" <<
(_eo/JRNL_DBLK_SIZE) << " dblks)";
oss << " h_rid=0x" << std::hex << _h_rid << std::dec;
- oss << " full=" << (_full ? "TRUE" : "FALSE");
+ oss << " lffull=" << (_lffull ? "T" : "F");
+ oss << " jfull=" << (_jfull ? "T" : "F");
oss << " Enqueued records (txn & non-txn): [ ";
for (unsigned i=0; i<_enq_cnt_list.size(); i++)
{
Modified: store/trunk/cpp/lib/jrnl/rmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rmgr.cpp 2008-09-12 14:46:21 UTC (rev 2458)
+++ store/trunk/cpp/lib/jrnl/rmgr.cpp 2008-09-12 14:47:22 UTC (rev 2459)
@@ -523,7 +523,7 @@
}
}
-void
+iores
rmgr::aio_cycle()
{
int16_t first_uninit = -1;
@@ -549,17 +549,19 @@
default:;
}
}
+ iores res = RHM_IORES_SUCCESS;
if (num_uninit)
- init_aio_reads(first_uninit, num_uninit);
+ res = init_aio_reads(first_uninit, num_uninit);
if (outstanding)
get_events();
+ return res;
}
-void
+iores
rmgr::init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit)
{
if (_fhdr_rd_outstanding)
- return;
+ return RHM_IORES_SUCCESS;
for (int16_t i=0; i<num_uninit; i++)
{
if (_rrfc.is_void()) // Nothing to do; this file not yet written to
@@ -568,6 +570,9 @@
if (!_valid)
{
u_int16_t fid = _jc->get_earliest_fid();
+ // If this file has not yet been written to, return RHM_IORES_EMPTY
+ if (_rrfc.file_controller(fid)->rd_void())
+ return RHM_IORES_EMPTY;
init_file_header_read(fid);
break;
}
@@ -604,6 +609,7 @@
if (_rrfc.file_rotate())
_rrfc.rotate();
}
+ return RHM_IORES_SUCCESS;
}
void
Modified: store/trunk/cpp/lib/jrnl/rmgr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rmgr.hpp 2008-09-12 14:46:21 UTC (rev 2458)
+++ store/trunk/cpp/lib/jrnl/rmgr.hpp 2008-09-12 14:47:22 UTC (rev 2459)
@@ -82,7 +82,7 @@
u_int32_t get_events(page_state state = AIO_COMPLETE);
void recover_complete();
inline bool is_valid() const {return _valid; }
- inline void synchronize() { if (!_valid) aio_cycle(); }
+ inline iores synchronize() { if (!_valid) return aio_cycle(); return RHM_IORES_SUCCESS; }
void invalidate();
/* TODO (if required)
@@ -99,8 +99,8 @@
void consume_xid_rec(rec_hdr& h, void* rptr, data_tok* dtokp);
void consume_filler();
iores skip(data_tok* dtokp);
- void aio_cycle();
- void init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit);
+ iores aio_cycle();
+ iores init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit);
void consume_fhdr();
void rotate_page();
u_int32_t dblks_rem() const;
Modified: store/trunk/cpp/lib/jrnl/wrfc.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wrfc.cpp 2008-09-12 14:46:21 UTC (rev 2458)
+++ store/trunk/cpp/lib/jrnl/wrfc.cpp 2008-09-12 14:47:22 UTC (rev 2459)
@@ -71,7 +71,7 @@
_reset_ok = true;
_owi = rdp->_owi;
_frot = rdp->_frot;
- if (is_full())
+ if (rdp->_lffull)
rotate();
}
else
17 years, 7 months
rhmessaging commits: r2458 - store/branches/mrg-1.0/cpp/lib/jrnl.
by rhmessaging-commits@lists.jboss.org
Author: kpvdr
Date: 2008-09-12 10:46:21 -0400 (Fri, 12 Sep 2008)
New Revision: 2458
Modified:
store/branches/mrg-1.0/cpp/lib/jrnl/jcntl.cpp
store/branches/mrg-1.0/cpp/lib/jrnl/nlfh.cpp
store/branches/mrg-1.0/cpp/lib/jrnl/rcvdat.hpp
store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.cpp
store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.hpp
store/branches/mrg-1.0/cpp/lib/jrnl/wrfc.cpp
Log:
Fix for BZ460346 " jexception 0x0406 nlfh::add_rd_subm_cnt_dblks() threw JERR_NFLH_RDOFFSOVFL: Attempted increase read offset past write offset. (_rd_subm_cnt_dblks=0 incr=4 _wr_subm_cnt_dblks=0) (BdbMessageStore.cpp:840)" This was a case of non-tx recovery from a journal whose last record exactly coincided with eof and has no outstanding enqueued records (ie nothing to read). Fixed by adjusting initialization parameters for this case.
Modified: store/branches/mrg-1.0/cpp/lib/jrnl/jcntl.cpp
===================================================================
--- store/branches/mrg-1.0/cpp/lib/jrnl/jcntl.cpp 2008-09-12 14:28:30 UTC (rev 2457)
+++ store/branches/mrg-1.0/cpp/lib/jrnl/jcntl.cpp 2008-09-12 14:46:21 UTC (rev 2458)
@@ -190,7 +190,7 @@
rcvr_janalyze(_rcvdat, prep_txn_list_ptr);
highest_rid = _rcvdat._h_rid;
- if (_rcvdat._full)
+ if (_rcvdat._jfull)
throw jexception(jerrno::JERR_JCNTL_RECOVERJFULL, "jcntl", "recover");
this->log(LOG_DEBUG, _rcvdat.to_log(_jid));
@@ -213,7 +213,7 @@
_rrfc.initialize(_num_jfiles, (nlfh**)_datafh, &_rcvdat);
_rmgr.initialize(rd_cb);
_wmgr.initialize(wr_cb, wcache_pgsize_sblks, wcache_num_pages, JRNL_WMGR_MAXDTOKPP,
- JRNL_WMGR_MAXWAITUS, _rcvdat._eo);
+ JRNL_WMGR_MAXWAITUS, (_rcvdat._lffull ? 0 : _rcvdat._eo));
_readonly_flag = true;
_init_flag = true;
@@ -328,7 +328,9 @@
if (res == RHM_IORES_RCINVALID)
{
get_wr_events(); // check for outstanding write events
- _rmgr.synchronize();
+ iores sres = _rmgr.synchronize();
+ if (sres != RHM_IORES_SUCCESS)
+ return sres;
if (cnt > 0)
::usleep(RCINVALID_SLEEP_TIME_MS * 1000);
}
@@ -614,7 +616,7 @@
rd._lfid = ji.get_end_file();
rd._owi = ji.get_initial_owi();
rd._frot = ji.get_frot();
- rd._empty = false;
+ rd._jempty = false;
}
catch (const jexception& e)
{
@@ -622,14 +624,14 @@
}
// Restore all read and write pointers and transactions
- if (!rd._empty)
+ if (!rd._jempty)
{
u_int16_t fid = rd._ffid;
std::ifstream ifs;
bool lowi = rd._owi; // local copy of owi to be used during analysis
while (rcvr_get_next_record(fid, &ifs, lowi, rd)) ;
- if (!rd._empty && prep_txn_list_ptr)
+ if (prep_txn_list_ptr)
{
std::vector<std::string> xid_list;
_tmap.xid_list(xid_list);
@@ -651,10 +653,12 @@
}
}
+ // Check for file full condition - add one to _jfsize_sblks to account for file header
+ rd._lffull = rd._eo == (1 + _jfsize_sblks) * JRNL_SBLK_SIZE * JRNL_DBLK_SIZE;
+
// Check for journal full condition
u_int16_t next_wr_fid = (rd._lfid + 1) % _num_jfiles;
- if (rd._ffid == next_wr_fid && rd._enq_cnt_list[next_wr_fid])
- rd._full = true;
+ rd._jfull = rd._ffid == next_wr_fid && rd._enq_cnt_list[next_wr_fid];
}
}
Modified: store/branches/mrg-1.0/cpp/lib/jrnl/nlfh.cpp
===================================================================
--- store/branches/mrg-1.0/cpp/lib/jrnl/nlfh.cpp 2008-09-12 14:28:30 UTC (rev 2457)
+++ store/branches/mrg-1.0/cpp/lib/jrnl/nlfh.cpp 2008-09-12 14:46:21 UTC (rev 2458)
@@ -107,7 +107,7 @@
#endif
if (ro) // Recovery initialization: set counters only
{
- if (!ro->_empty)
+ if (!ro->_jempty)
{
// For last file only, set write counters to end of last record (the
// continuation point); for all others, set to eof.
@@ -151,7 +151,7 @@
{
if (ro)
{
- if (!ro->_empty)
+ if (!ro->_jempty)
{
if (ro->_lfid == _fid)
{
Modified: store/branches/mrg-1.0/cpp/lib/jrnl/rcvdat.hpp
===================================================================
--- store/branches/mrg-1.0/cpp/lib/jrnl/rcvdat.hpp 2008-09-12 14:28:30 UTC (rev 2457)
+++ store/branches/mrg-1.0/cpp/lib/jrnl/rcvdat.hpp 2008-09-12 14:46:21 UTC (rev 2458)
@@ -49,39 +49,42 @@
{
bool _owi; ///< Overwrite indicator
bool _frot; ///< First rotation flag
- bool _empty; ///< Journal data files empty
+ bool _jempty; ///< Journal data files empty
u_int16_t _ffid; ///< First file id
std::size_t _fro; ///< First record offset in ffid
u_int16_t _lfid; ///< Last file id
std::size_t _eo; ///< End offset (first byte past last record)
u_int64_t _h_rid; ///< Highest rid found
- bool _full; ///< Journal is full
+ bool _lffull; ///< last file is full
+ bool _jfull; ///< Journal is full
std::vector<u_int32_t> _enq_cnt_list; ///< Number enqueued records found for each file
rcvdat():
_owi(false),
_frot(false),
- _empty(true),
+ _jempty(true),
_ffid(0),
_fro(0),
_lfid(0),
_eo(0),
_h_rid(0),
- _full(false),
+ _lffull(false),
+ _jfull(false),
_enq_cnt_list()
{}
void reset(u_int16_t num_jfiles)
{
- _owi=false;
+ _owi = false;
_frot = false;
- _empty=true;
- _ffid=0;
- _fro=0;
- _lfid=0;
- _eo=0;
- _h_rid=0;
- _full = false;
+ _jempty = true;
+ _ffid = 0;
+ _fro = 0;
+ _lfid = 0;
+ _eo = 0;
+ _h_rid = 0;
+ _lffull = false;
+ _jfull = false;
_enq_cnt_list.clear();
_enq_cnt_list.resize(num_jfiles, 0);
}
@@ -92,7 +95,7 @@
oss << "Recover file analysis (jid=\"" << jid << "\"):" << std::endl;
oss << " Overwrite indicator (_owi) = " << (_owi ? "TRUE" : "FALSE") << std::endl;
oss << " First rotation (_frot) = " << (_frot ? "TRUE" : "FALSE") << std::endl;
- oss << " Journal empty (_empty) = " << (_empty ? "TRUE" : "FALSE") << std::endl;
+ oss << " Journal empty (_jempty) = " << (_jempty ? "TRUE" : "FALSE") << std::endl;
oss << " First fid (_ffid) = " << _ffid << std::endl;
oss << " First record offset in first fid (_fro) = 0x" << std::hex << _fro <<
std::dec << " (" << (_fro/JRNL_DBLK_SIZE) << " dblks)" << std::endl;
@@ -100,7 +103,8 @@
oss << " End offset (_eo) = 0x" << std::hex << _eo << std::dec << " (" <<
(_eo/JRNL_DBLK_SIZE) << " dblks)" << std::endl;
oss << " Highest rid (_h_rid) = 0x" << std::hex << _h_rid << std::dec << std::endl;
- oss << " Journal full (_full) = " << (_full ? "TRUE" : "FALSE") << std::endl;
+ oss << " Last file full (_lffull) = " << (_lffull ? "TRUE" : "FALSE") << std::endl;
+ oss << " Journal full (_jfull) = " << (_jfull ? "TRUE" : "FALSE") << std::endl;
oss << " Enqueued records (txn & non-txn):" << std::endl;
for (unsigned i=0; i<_enq_cnt_list.size(); i++)
oss << " File " << std::setw(2) << i << ": " << _enq_cnt_list[i] <<
@@ -112,9 +116,9 @@
{
std::ostringstream oss;
oss << "Recover file analysis (jid=\"" << jid << "\"):";
- oss << " owi=" << (_owi ? "TRUE" : "FALSE");
- oss << " frot=" << (_frot ? "TRUE" : "FALSE");
- oss << " empty=" << (_empty ? "TRUE" : "FALSE");
+ oss << " owi=" << (_owi ? "T" : "F");
+ oss << " frot=" << (_frot ? "T" : "F");
+ oss << " jempty=" << (_jempty ? "T" : "F");
oss << " ffid=" << _ffid;
oss << " fro=0x" << std::hex << _fro << std::dec << " (" <<
(_fro/JRNL_DBLK_SIZE) << " dblks)";
@@ -122,7 +126,8 @@
oss << " eo=0x" << std::hex << _eo << std::dec << " (" <<
(_eo/JRNL_DBLK_SIZE) << " dblks)";
oss << " h_rid=0x" << std::hex << _h_rid << std::dec;
- oss << " full=" << (_full ? "TRUE" : "FALSE");
+ oss << " lffull=" << (_lffull ? "T" : "F");
+ oss << " jfull=" << (_jfull ? "T" : "F");
oss << " Enqueued records (txn & non-txn): [ ";
for (unsigned i=0; i<_enq_cnt_list.size(); i++)
{
Modified: store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.cpp
===================================================================
--- store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.cpp 2008-09-12 14:28:30 UTC (rev 2457)
+++ store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.cpp 2008-09-12 14:46:21 UTC (rev 2458)
@@ -526,7 +526,7 @@
}
}
-void
+iores
rmgr::aio_cycle()
{
int16_t first_uninit = -1;
@@ -552,17 +552,19 @@
default:;
}
}
+ iores res = RHM_IORES_SUCCESS;
if (num_uninit)
- init_aio_reads(first_uninit, num_uninit);
+ res = init_aio_reads(first_uninit, num_uninit);
if (outstanding)
get_events();
+ return res;
}
-void
+iores
rmgr::init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit)
{
if (_fhdr_rd_outstanding)
- return;
+ return RHM_IORES_SUCCESS;
for (int16_t i=0; i<num_uninit; i++)
{
if (_rrfc.is_void()) // Nothing to do; this file not yet written to
@@ -571,6 +573,9 @@
if (!_valid)
{
u_int16_t fid = _jc->get_earliest_fid();
+ // If this file has not yet been written to, return RHM_IORES_EMPTY
+ if (_rrfc.file_handle(fid)->rd_void())
+ return RHM_IORES_EMPTY;
init_file_header_read(fid);
break;
}
@@ -607,6 +612,7 @@
if (_rrfc.file_rotate())
_rrfc.rotate();
}
+ return RHM_IORES_SUCCESS;
}
void
Modified: store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.hpp
===================================================================
--- store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.hpp 2008-09-12 14:28:30 UTC (rev 2457)
+++ store/branches/mrg-1.0/cpp/lib/jrnl/rmgr.hpp 2008-09-12 14:46:21 UTC (rev 2458)
@@ -82,7 +82,7 @@
u_int32_t get_events(page_state state = AIO_COMPLETE);
void recover_complete();
inline bool is_valid() const {return _valid; }
- inline void synchronize() { if (!_valid) aio_cycle(); }
+ inline iores synchronize() { if (!_valid) return aio_cycle(); return RHM_IORES_SUCCESS; }
void invalidate();
/* TODO (if required)
@@ -99,8 +99,8 @@
void consume_xid_rec(rec_hdr& h, void* rptr, data_tok* dtokp);
void consume_filler();
iores skip(data_tok* dtokp);
- void aio_cycle();
- void init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit);
+ iores aio_cycle();
+ iores init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit);
void consume_fhdr();
void rotate_page();
u_int32_t dblks_rem() const;
Modified: store/branches/mrg-1.0/cpp/lib/jrnl/wrfc.cpp
===================================================================
--- store/branches/mrg-1.0/cpp/lib/jrnl/wrfc.cpp 2008-09-12 14:28:30 UTC (rev 2457)
+++ store/branches/mrg-1.0/cpp/lib/jrnl/wrfc.cpp 2008-09-12 14:46:21 UTC (rev 2458)
@@ -71,7 +71,7 @@
_reset_ok = true;
_owi = rdp->_owi;
_frot = rdp->_frot;
- if (is_full())
+ if (rdp->_lffull)
rotate();
}
else
17 years, 7 months
rhmessaging commits: r2457 - in mgmt/trunk/cumin/python: wooly and 1 other directory.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-12 10:28:30 -0400 (Fri, 12 Sep 2008)
New Revision: 2457
Modified:
mgmt/trunk/cumin/python/cumin/broker.py
mgmt/trunk/cumin/python/cumin/model.py
mgmt/trunk/cumin/python/cumin/widgets.py
mgmt/trunk/cumin/python/wooly/widgets.py
mgmt/trunk/cumin/python/wooly/widgets.strings
Log:
Add ability to disable an action link.
Modified: mgmt/trunk/cumin/python/cumin/broker.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/broker.py 2008-09-11 21:48:45 UTC (rev 2456)
+++ mgmt/trunk/cumin/python/cumin/broker.py 2008-09-12 14:28:30 UTC (rev 2457)
@@ -368,13 +368,13 @@
class Actions(CuminActions):
def do_get_items(self, session, reg):
cls = self.app.model.get_class_by_object(reg)
- acts = [(x.get_href(session, reg), x.get_title(session))
+ acts = [(x.get_href(session, reg), x.get_title(session), x.get_enabled(session, reg))
for x in cls.actions if x.navigable]
if reg.broker:
cls = self.app.model.get_class_by_object(reg.broker)
acts.extend([(x.get_href(session, reg.broker),
- x.get_title(session))
+ x.get_title(session), x.get_enabled(session, reg.broker))
for x in cls.actions if x.navigable])
return acts
Modified: mgmt/trunk/cumin/python/cumin/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/model.py 2008-09-11 21:48:45 UTC (rev 2456)
+++ mgmt/trunk/cumin/python/cumin/model.py 2008-09-12 14:28:30 UTC (rev 2457)
@@ -186,6 +186,9 @@
else:
return self.name
+ def get_enabled(self, session, object):
+ return True
+
def get_verb(self, session):
return None
@@ -1739,7 +1742,12 @@
def do_invoke(self, job, reason, completion):
job.Hold(self.cumin_model.data, completion, reason)
-
+
+ def get_enabled(self, session, job):
+ is_held = JobStatusInfo.get_status_int("Held") == job.JobStatus
+ is_deleted = job.deletionTime is not None
+ return not (is_held or is_deleted)
+
class Release(CuminAction):
def show(self, session, job):
frame = self.cumin_class.get_pool_frame(session)
@@ -1754,6 +1762,11 @@
def do_invoke(self, job, reason, completion):
job.Release(self.cumin_model.data, completion, reason)
+ def get_enabled(self, session, job):
+ is_held = JobStatusInfo.get_status_int("Held") == job.JobStatus
+ is_deleted = job.deletionTime is not None
+ return is_held and not is_deleted
+
class Remove(CuminAction):
def show(self, session, job):
frame = self.cumin_class.get_pool_frame(session)
@@ -1768,6 +1781,10 @@
def do_invoke(self, job, reason, completion):
job.Remove(self.cumin_model.data, completion, reason)
+ def get_enabled(self, session, job):
+ is_deleted = job.deletionTime is not None
+ return not is_deleted
+
class SaveAd(CuminAction):
def show(self, session, job):
pass
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2008-09-11 21:48:45 UTC (rev 2456)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2008-09-12 14:28:30 UTC (rev 2457)
@@ -421,7 +421,7 @@
def do_get_items(self, session, object):
cls = self.app.model.get_class_by_object(object)
- return [(x.get_href(session, object), x.get_title(session))
+ return [(x.get_href(session, object), x.get_title(session), x.get_enabled(session, object))
for x in cls.actions if x.navigable]
class CuminDetails(Widget):
@@ -467,7 +467,7 @@
class SummaryActions(CuminActions):
def do_get_items(self, session, object):
cls = self.app.model.get_class_by_object(object)
- return [(x.get_href(session, object), x.get_title(session))
+ return [(x.get_href(session, object), x.get_title(session), x.get_enabled(session, object))
for x in cls.actions if x.summary and x.navigable]
class StateSwitch(ItemSet):
Modified: mgmt/trunk/cumin/python/wooly/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/wooly/widgets.py 2008-09-11 21:48:45 UTC (rev 2456)
+++ mgmt/trunk/cumin/python/wooly/widgets.py 2008-09-12 14:28:30 UTC (rev 2457)
@@ -438,11 +438,14 @@
class ActionRenderer(TemplateRenderer):
def render_href(self, session, action):
- return action[0]
-
+ return action[2] and " href=\"%s\"" % action[0] or ""
+
def render_content(self, session, action):
return action[1]
+ def render_tag(self, session, action):
+ return action[2] and "a" or "span"
+
def escape_amp(string):
return str(string).replace("&", "&")
Modified: mgmt/trunk/cumin/python/wooly/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/wooly/widgets.strings 2008-09-11 21:48:45 UTC (rev 2456)
+++ mgmt/trunk/cumin/python/wooly/widgets.strings 2008-09-12 14:28:30 UTC (rev 2457)
@@ -176,14 +176,17 @@
ul.ActionSet li {
}
-ul.ActionSet a:before {
+ul.ActionSet a:before, ul.ActionSet span:before {
content: "\00BB \0020";
font-weight: bold;
color: #dc9f2e;
}
+ul.ActionSet span {
+ color: #666;
+}
[ActionSet.html]
<ul class="ActionSet">{items}</ul>
[ActionSet.action_html]
-<li><a href="{href}">{content}</a></li>
+<li><{tag}{href}>{content}</{tag}></li>
17 years, 7 months
rhmessaging commits: r2456 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: eallen
Date: 2008-09-11 17:48:45 -0400 (Thu, 11 Sep 2008)
New Revision: 2456
Modified:
mgmt/trunk/cumin/python/cumin/job.py
mgmt/trunk/cumin/python/cumin/job.strings
Log:
Added All/Running/Held/Deleted phase to jobsets.
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-09-11 21:48:06 UTC (rev 2455)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-09-11 21:48:45 UTC (rev 2456)
@@ -67,11 +67,14 @@
col.alignment = "right"
self.add_hidden_column(col)
+ self.phase = JobStatusSwitch(app, "phase")
+ self.add_child(self.phase)
+
def get_args(self, session):
return self.frame.get_args(session)
- def render_title(self, session, job):
- return "Jobs %s" % fmt_count(self.get_item_count(session, job))
+ def get_phase_sql(self, session):
+ return self.phase.get_sql_constraint(session)
class ArgsColumn(SqlTableColumn):
def render_title(self, session, data):
@@ -213,19 +216,82 @@
self.__tabs.add_tab(SystemSet(app, "systems"))
self.__tabs.add_tab(CuminDetails(app, "details"))
+class JobRemoveButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_jobs_remove(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Remove"
+
+ def render_disabled_attr(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return phase == "d" and "disabled=\"disabled\"" or None
+
+ def render_class(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return phase == "d" and "disabled" or "enabled"
+
+class JobHoldButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_jobs_hold(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Hold"
+
+ def render_disabled_attr(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "h" or phase == "d") and "disabled=\"disabled\"" or None
+
+ def render_class(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "h" or phase == "d") and "disabled" or "enabled"
+
+class JobReleaseButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_jobs_release(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Release"
+
+ def render_disabled_attr(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "r" or phase == "d") and "disabled=\"disabled\"" or None
+
+ def render_class(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "r" or phase == "d") and "disabled" or "enabled"
+
class JobGroupJobSet(JobSet, Form):
def __init__(self, app, name):
super(JobGroupJobSet, self).__init__(app, name)
self.set_default_column_name("global_job_id")
- self.__remove = self.Remove(app, "remove", self)
+ self.__remove = JobRemoveButton(app, "remove", self)
self.add_child(self.__remove)
- self.__hold = self.Hold(app, "hold", self)
+ self.__hold = JobHoldButton(app, "hold", self)
self.add_child(self.__hold)
- self.__release = self.Release(app, "release", self)
+ self.__release = JobReleaseButton(app, "release", self)
self.add_child(self.__release)
def pre_render(self, session, args):
@@ -235,50 +301,15 @@
self.show_column(session, "job_status")
self.show_column(session, "scheduler")
+ def render_title(self, session, group):
+ where_group = "custom_group = '%s'" % group.get_id()
+ return "Jobs %s" % fmt_count(Job.select(where_group).count())
+
def render_sql_where(self, session, group):
- where = "where j.custom_group = '%s'" % group.get_id()
- return where
+ phase_sql = self.get_phase_sql(session)
+ group_sql = "j.custom_group = '%s'" % group.get_id()
+ return "where %s" % " and ".join([phase_sql, group_sql])
- class Remove(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_remove(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Remove"
-
- class Hold(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_hold(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Hold"
-
- class Release(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_release(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Release"
-
-
class JobGroupStatus(CuminStatus):
def render_color(self, session, job_group):
#return JobStatusInfo.get_status_color(job.JobStatus)
@@ -699,14 +730,23 @@
return self.frame.get_args(session)
def render_title(self, session, job):
- return "Jobs %s" % fmt_count(self.job_tab.get_item_count(session, job))
+ return "Jobs %s" % fmt_count(Job.select().count())#self.job_tab.get_item_count(session, job))
+ def show_status_switch(self, session):
+ is_group = self.is_group.get(session)
+ return is_group == "j"
+
def set_switch(self, session, switch):
if switch == "group":
self.is_group.set(session, "g")
else:
self.is_group.set(session, "j")
+ def render_phase(self, session, *args):
+ is_group = self.is_group.get(session)
+ if is_group == "j":
+ return self.job_tab.phase.render(session)
+
def render_jobs(self, session, args):
is_group = self.is_group.get(session)
if is_group == "j":
@@ -723,13 +763,13 @@
self.set_default_column_name("global_job_id")
- self.__remove = self.Remove(app, "remove", self)
+ self.__remove = JobRemoveButton(app, "remove", self)
self.add_child(self.__remove)
- self.__hold = self.Hold(app, "hold", self)
+ self.__hold = JobHoldButton(app, "hold", self)
self.add_child(self.__hold)
- self.__release = self.Release(app, "release", self)
+ self.__release = JobReleaseButton(app, "release", self)
self.add_child(self.__release)
def pre_render(self, session, args):
@@ -741,45 +781,10 @@
self.show_column(session, "scheduler")
self.show_column(session, "job_status")
- class Remove(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
+ def render_sql_where(self, session, *args):
+ phase_sql = self.get_phase_sql(session)
+ return "where %s" % phase_sql
- branch = session.branch()
- frame = self.frame.show_jobs_remove(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Remove"
-
- class Hold(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_hold(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Hold"
-
- class Release(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_release(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Release"
-
class JobGroupTab(JobGroupSet, Form):
def __init__(self, app, name):
super(JobGroupTab, self).__init__(app, name)
@@ -995,6 +1000,31 @@
def render_reason_text(self, session, *args):
return "Remove Reason"
+class JobStatusSwitch(StateSwitch):
+ def __init__(self, app, name):
+ super(JobStatusSwitch, self).__init__(app, name)
+
+ self.add_state("a", "All")
+ self.add_state("r", "Running")
+ self.add_state("h", "Held")
+ self.add_state("d", "Deleted")
+
+ def get_sql_constraint(self, session):
+ phase = self.get(session)
+
+ if phase == "a":
+ sql = "j.deletion_time is null"
+ elif phase == "r":
+ sql = "(j.job_status = %i" % JobStatusInfo.get_status_int("Running") + \
+ " and j.deletion_time is null)"
+ elif phase == "h":
+ sql = "(j.job_status = %i" % JobStatusInfo.get_status_int("Held") + \
+ " and j.deletion_time is null)"
+ else:
+ sql = "j.deletion_time is not null"
+
+ return sql
+
class JobStatusInfo(object):
stat_strings = ["Unexpanded", "Idle", "Running", "Removed", "Completed", "Held", "Submission Error"]
stat_colors = ["red", "green", "green", "green", "green", "yellow", "red"]
@@ -1004,6 +1034,7 @@
return cls.stat_strings[stat]
except:
return ""
+
@classmethod
def get_status_color(cls, stat):
try:
@@ -1011,3 +1042,10 @@
except:
return "red"
+ @classmethod
+ def get_status_int(cls, stat):
+ try:
+ return cls.stat_strings.index(stat)
+ except:
+ return -1
+
Modified: mgmt/trunk/cumin/python/cumin/job.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.strings 2008-09-11 21:48:06 UTC (rev 2455)
+++ mgmt/trunk/cumin/python/cumin/job.strings 2008-09-11 21:48:45 UTC (rev 2456)
@@ -84,6 +84,7 @@
[JobsAndGroupsTab.html]
+ <div class="rfloat">{phase}</div>
{group}
{jobs}{job_groups}
@@ -113,10 +114,11 @@
</form>
[JobGroupJobSet.html]
-<form id="{id}" method="post" action="?">
+ <div class="rfloat">{phase}</div>
+<form id="{id}" style="clear:right;" method="post" action="?">
<div class="sactions">
- <h2>Act on Selected Groups:</h2>
+ <h2>Act on Selected Jobs:</h2>
{hold} {release} {remove}
</div>
17 years, 7 months