/** * Default value is "NORMAL". Which implies {@link #get(Comparable)} will always return Priotity.NORMAL * * @return "NORMAL" */ @Override protected String getDefaultConf() { return Priority.NORMAL.toString(); } }
/** * Default value is "NORMAL". Which implies {@link #get(Comparable)} will always return Priotity.NORMAL * * @return "NORMAL" */ @Override protected String getDefaultConf() { return Priority.NORMAL.toString(); } }
Priority decidePriority(AbstractQueryContext ctx, QueryPriorityDecider queryPriorityDecider) { if (whetherCalculatePriority && ctx.getPriority() == null) { try { // On-demand re-computation of cost, in case it's not alredy set by a previous estimate call. // In driver test cases, estimate doesn't happen. Hence this code path ensures cost is computed and // priority is set based on correct cost. if (ctx.getDriverQueryCost(this) == null) { ctx.setDriverCost(this, this.estimate(ctx)); } // Inside try since non-data fetching queries can also be executed by async method. Priority priority = queryPriorityDecider.decidePriority(ctx.getDriverQueryCost(this)); String priorityStr = priority.toString(); ctx.getDriverConf(this).set("mapred.job.priority", priorityStr); Map<String, String> confUpdate = new HashMap<>(); confUpdate.put("mapred.job.priority", priorityStr); ctx.updateConf(confUpdate); log.info("set priority to {}", priority); return priority; } catch (Exception e) { // not failing query launch when setting priority fails // priority will be set to usually NORMAL - the default in underlying system. log.error("could not set priority for lens session id:{} User query: {}", ctx.getLensSessionIdentifier(), ctx.getUserQuery(), e); return null; } } return null; }
Priority decidePriority(AbstractQueryContext ctx, QueryPriorityDecider queryPriorityDecider) { if (whetherCalculatePriority && ctx.getPriority() == null) { try { // On-demand re-computation of cost, in case it's not alredy set by a previous estimate call. // In driver test cases, estimate doesn't happen. Hence this code path ensures cost is computed and // priority is set based on correct cost. if (ctx.getDriverQueryCost(this) == null) { ctx.setDriverCost(this, this.estimate(ctx)); } // Inside try since non-data fetching queries can also be executed by async method. Priority priority = queryPriorityDecider.decidePriority(ctx.getDriverQueryCost(this)); String priorityStr = priority.toString(); ctx.getDriverConf(this).set("mapred.job.priority", priorityStr); Map<String, String> confUpdate = new HashMap<>(); confUpdate.put("mapred.job.priority", priorityStr); ctx.updateConf(confUpdate); log.info("set priority to {}", priority); return priority; } catch (Exception e) { // not failing query launch when setting priority fails // priority will be set to usually NORMAL - the default in underlying system. log.error("could not set priority for lens session id:{} User query: {}", ctx.getLensSessionIdentifier(), ctx.getUserQuery(), e); return null; } } return null; }
@Test(enabled=true, dataProvider = "priority_check") public void testPriority(String query, Priority priority) throws Exception { QueryHandle qh = (QueryHandle) qHelper.executeQuery(query).getData(); qHelper.waitForQueryToRun(qh); LensQuery lq = qHelper.getLensQuery(sessionHandleString, qh); String progressMsg = lq.getStatus().getProgressMessage(); logger.info("Progress msg : " + progressMsg); String jobId = Util.getJobIdFromProgressMsg(progressMsg); Assert.assertEquals(lq.getPriority(), priority); Assert.assertEquals(Util.getMapredJobPrority(jobUrl, jobId), priority.toString()); }
Priority priority = driver.decidePriority(ctx); assertEquals(priority, expected, "cost: " + ctx.getDriverQueryCost(driver) + "priority: " + priority); assertEquals(ctx.getConf().get("mapred.job.priority"), priority.toString()); assertEquals(driver.decidePriority(ctx, alwaysNormalPriorityDecider), Priority.NORMAL);
finishedLensQuery.setPriority(Priority.NORMAL.toString());
this.priority = ctx.getPriority().toString();
this.priority = ctx.getPriority().toString();